home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume26 / cook-1.4 / part10 < prev    next >
Encoding:
Text File  |  1993-05-03  |  66.7 KB  |  2,709 lines

  1. Newsgroups: comp.sources.unix
  2. From: pmiller@bmr.gov.au (Peter Miller)
  3. Subject: v26i218: cook-1.4 - a file construction tool (like "make"), Part10/11
  4. Sender: unix-sources-moderator@efficacy.home.vix.com
  5. Approved: WhoAmI@efficacy.home.vix.com
  6.  
  7. Submitted-By: pmiller@bmr.gov.au (Peter Miller)
  8. Posting-Number: Volume 26, Issue 218
  9. Archive-Name: cook-1.4/part10
  10.  
  11. #! /bin/sh
  12. # This is a shell archive.  Remove anything before this line, then unpack
  13. # it by saving it into a file and typing "sh file".  To overwrite existing
  14. # files, type "sh file -c".  You can also feed this as standard input via
  15. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  16. # will see the following message at the end:
  17. #        "End of archive 10 (of 11)."
  18. # Contents:  CHANGES cook/cook.c
  19. # Wrapped by vixie@efficacy.home.vix.com on Tue May  4 01:36:43 1993
  20. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  21. if test -f 'CHANGES' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'CHANGES'\"
  23. else
  24. echo shar: Extracting \"'CHANGES'\" \(33082 characters\)
  25. sed "s/^X//" >'CHANGES' <<'END_OF_FILE'
  26. X
  27. X
  28. X
  29. XProject "cook.1.4"                          Page 1
  30. XList of Changes                    Sat Mar 27 23:14:17 1993
  31. X
  32. XChange    State        Description
  33. X------- -------        -------------
  34. X   1    completed    New release derived from cook.1.3.
  35. X   2    completed    cope with missing files better in c_incl
  36. X   3    completed    inprove failure messages from tests
  37. X   4    completed    getenv name conflict
  38. X   5    completed    more convex improvements
  39. X   6    completed    fix copyright notices
  40. X   7    completed    fix license version
  41. X   8    completed    use _ty suffix, not _t suffix
  42. X   9    completed    add GNU style long option names
  43. X  10    completed    sundry improvements
  44. X  11    completed    ports to more platforms
  45. X  12    completed    improve the manual pages
  46. X  13    being_        note ConvexOS as a known port
  47. X    integrated
  48. X
  49. X
  50. X
  51. XProject "cook.1.4", Change 1                      Page 1
  52. XChange Details                    Sat Mar 27 23:14:19 1993
  53. X
  54. XNAME
  55. X    Project "cook.1.4", Delta 1, Change 1.
  56. X
  57. XSUMMARY
  58. X    New release derived from cook.1.3.
  59. X
  60. XDESCRIPTION
  61. X    New release derived from cook.1.3.
  62. X
  63. X    This change is exempt from testing.  This change is exempt from
  64. X    testing against the baseline.
  65. X
  66. XCAUSE
  67. X    This change was caused by internal_enhancement.
  68. X
  69. XFILES
  70. X    Type    Action    Edit    File Name
  71. X    ------- ------- ------- -----------
  72. X    source    create    1    COPYING
  73. X    source    create    1    aux/BUILDING.man
  74. X    source    create    1    aux/CHANGES.sh
  75. X    source    create    1    aux/Howto.cook
  76. X    source    create    1    aux/MANIFEST.sh
  77. X    source    create    1    aux/Makefile.awk
  78. X    source    create    1    aux/Makefile.sh
  79. X    source    create    1    aux/README.man
  80. X    source    create    1    aux/patches.sh
  81. X    source    create    1    c_incl/cache.c
  82. X    source    create    1    c_incl/cache.h
  83. X    source    create    1    c_incl/lang_c.c
  84. X    source    create    1    c_incl/lang_roff.c
  85. X    source    create    1    c_incl/main.c
  86. X    source    create    1    c_incl/os.c
  87. X    source    create    1    c_incl/os.h
  88. X    source    create    1    c_incl/sniff.c
  89. X    source    create    1    c_incl/sniff.h
  90. X    source    create    1    common/ansi.c
  91. X    source    create    1    common/arglex.c
  92. X    source    create    1    common/arglex.h
  93. X    source    create    1    common/error.c
  94. X    source    create    1    common/error.h
  95. X    source    create    1    common/help.c
  96. X    source    create    1    common/help.h
  97. X    source    create    1    common/main.h
  98. X    source    create    1    common/mem.c
  99. X    source    create    1    common/mem.h
  100. X    source    create    1    common/s-v-arg.h
  101. X    source    create    1    common/str.c
  102. X    source    create    1    common/str.h
  103. X    source    create    1    common/trace.c
  104. X    source    create    1    common/trace.h
  105. X    source    create    1    common/version.c
  106. X    source    create    1    common/version.h
  107. X    source    create    1    common/word.c
  108. X    source    create    1    common/word.h
  109. X    source    create    1    conf/ConvexOS-10
  110. X    source    create    1    conf/SunOS-4.1.2
  111. X
  112. X
  113. X
  114. XProject "cook.1.4", Change 1                      Page 2
  115. XChange Details                    Sat Mar 27 23:14:19 1993
  116. X
  117. X    Type    Action    Edit    File Name
  118. X    ------- ------- ------- -----------
  119. X    source    create    1    conf/SunOS-4.1.3
  120. X    source    create    1    conf/SysV-4.0
  121. X    source    create    1    conf/dgux-5.4.1
  122. X    source    create    1    config
  123. X    source    create    1    cook/builtin.c
  124. X    source    create    1    cook/builtin.h
  125. X    source    create    1    cook/cook.c
  126. X    source    create    1    cook/cook.h
  127. X    source    create    1    cook/env.c
  128. X    source    create    1    cook/env.h
  129. X    source    create    1    cook/expr.c
  130. X    source    create    1    cook/expr.h
  131. X    source    create    1    cook/glob.c
  132. X    source    create    1    cook/glob.h
  133. X    source    create    1    cook/hashline.h
  134. X    source    create    1    cook/hashline.y
  135. X    source    create    1    cook/id.c
  136. X    source    create    1    cook/id.h
  137. X    source    create    1    cook/lex.c
  138. X    source    create    1    cook/lex.h
  139. X    source    create    1    cook/listing.c
  140. X    source    create    1    cook/listing.h
  141. X    source    create    1    cook/main.c
  142. X    source    create    1    cook/match.c
  143. X    source    create    1    cook/match.h
  144. X    source    create    1    cook/option.c
  145. X    source    create    1    cook/option.h
  146. X    source    create    1    cook/os.c
  147. X    source    create    1    cook/os.h
  148. X    source    create    1    cook/parse.h
  149. X    source    create    1    cook/parse.y
  150. X    source    create    1    cook/stmt.c
  151. X    source    create    1    cook/stmt.h
  152. X    source    create    1    cooktime/date.h
  153. X    source    create    1    cooktime/date.y
  154. X    source    create    1    cooktime/main.c
  155. X    source    create    1    doc/builtin
  156. X    source    create    1    doc/cmdline
  157. X    source    create    1    doc/conditions
  158. X    source    create    1    doc/glossary
  159. X    source    create    1    doc/history
  160. X    source    create    1    doc/how
  161. X    source    create    1    doc/intro
  162. X    source    create    1    doc/intro.aa
  163. X    source    create    1    doc/intro.bb
  164. X    source    create    1    doc/language
  165. X    source    create    1    doc/match
  166. X    source    create    1    doc/option
  167. X    source    create    1    doc/refman.t
  168. X    source    create    1    doc/system
  169. X    source    create    1    doc/variables
  170. X    source    create    1    find_libs/main.c
  171. X    source    create    1    find_libs/os.c
  172. X    source    create    1    find_libs/os.h
  173. X    source    create    1    h/float.h
  174. X
  175. X
  176. X
  177. XProject "cook.1.4", Change 1                      Page 3
  178. XChange Details                    Sat Mar 27 23:14:19 1993
  179. X
  180. X    Type    Action    Edit    File Name
  181. X    ------- ------- ------- -----------
  182. X    source    create    1    h/limits.h
  183. X    source    create    1    h/stdarg.h-min
  184. X    source    create    1    h/stddef.h
  185. X    source    create    1    h/stdlib.h
  186. X    source    create    1    h/string.h
  187. X    source    create    1    h/time.h
  188. X    source    create    1    lib/as
  189. X    source    create    1    lib/bison
  190. X    source    create    1    lib/c
  191. X    source    create    1    lib/gcc
  192. X    source    create    1    lib/home
  193. X    source    create    1    lib/lex
  194. X    source    create    1    lib/library
  195. X    source    create    1    lib/print
  196. X    source    create    1    lib/program
  197. X    source    create    1    lib/sccs
  198. X    source    create    1    lib/text
  199. X    source    create    1    lib/usr
  200. X    source    create    1    lib/usr.local
  201. X    source    create    1    lib/yacc
  202. X    source    create    1    lib/yacc_many
  203. X    source    create    1    man1/c_incl.1
  204. X    source    create    1    man1/cook.1
  205. X    source    create    1    man1/cooktime.1
  206. X    source    create    1    man1/find_libs.1
  207. X    source    create    1    man1/roffpp.1
  208. X    source    create    1    roffpp/main.c
  209. X    source    create    1    roffpp/preprocess.c
  210. X    source    create    1    roffpp/preprocess.h
  211. X    test    create    1    test/00/t0001a.sh
  212. X    test    create    1    test/00/t0002a.sh
  213. X    test    create    1    test/00/t0003a.sh
  214. X    test    create    1    test/00/t0004a.sh
  215. X    test    create    1    test/00/t0005a.sh
  216. X    test    create    1    test/00/t0006a.sh
  217. X    test    create    1    test/00/t0007a.sh
  218. X    test    create    1    test/00/t0008a.sh
  219. X    test    create    1    test/00/t0009a.sh
  220. X    test    create    1    test/00/t0010a.sh
  221. X    test    create    1    test/00/t0011a.sh
  222. X    test    create    1    test/00/t0012a.sh
  223. X    test    create    1    test/00/t0013a.sh
  224. X    test    create    1    test/00/t0014a.sh
  225. X    test    create    1    test/00/t0015a.sh
  226. X    test    create    1    test/00/t0016a.sh
  227. X    test    create    1    test/00/t0017a.sh
  228. X    test    create    1    test/00/t0018a.sh
  229. X    test    create    1    test/00/t0019a.sh
  230. X    test    create    1    test/00/t0020a.sh
  231. X    test    create    1    test/00/t0021a.sh
  232. X    test    create    1    test/00/t0022a.sh
  233. X    test    create    1    test/00/t0023a.sh
  234. X    test    create    1    test/00/t0024a.sh
  235. X    test    create    1    test/00/t0025a.sh
  236. X    test    create    1    test/00/t0026a.sh
  237. X
  238. X
  239. X
  240. XProject "cook.1.4", Change 1                      Page 4
  241. XChange Details                    Sat Mar 27 23:14:19 1993
  242. X
  243. X    Type    Action    Edit    File Name
  244. X    ------- ------- ------- -----------
  245. X    test    create    1    test/00/t0027a.sh
  246. X    test    create    1    test/00/t0028a.sh
  247. X    test    create    1    test/00/t0029a.sh
  248. X    test    create    1    test/00/t0030a.sh
  249. X    test    create    1    test/00/t0031a.sh
  250. X    test    create    1    test/00/t0032a.sh
  251. X    test    create    1    test/00/t0033a.sh
  252. X    test    create    1    test/00/t0034a.sh
  253. X    test    create    1    test/00/t0035a.sh
  254. X    test    create    1    test/00/t0036a.sh
  255. X    test    create    1    test/00/t0037a.sh
  256. X    test    create    1    test/00/t0038a.sh
  257. X    test    create    1    test/00/t0039a.sh
  258. X    test    create    1    test/00/t0040a.sh
  259. X    test    create    1    test/00/t0041a.sh
  260. X
  261. XHISTORY
  262. X    What        When        Who    Comment
  263. X    ------        ------        -----    ---------
  264. X    new_change    Thu Jan     7    pmiller
  265. X            16:27:56 1993    1
  266. X    develop_begin    Thu Jan     7    pmiller
  267. X            16:27:56 1993    1
  268. X    develop_end    Thu Jan     7    pmiller
  269. X            16:27:56 1993    1
  270. X    review_pass    Thu Jan     7    pmiller
  271. X            16:27:56 1993    1
  272. X    integrate_begin Thu Jan     7    pmiller
  273. X            16:27:56 1993    1
  274. X    integrate_pass    Thu Jan     7    pmiller
  275. X            16:32:29 1993    1
  276. X
  277. X
  278. X
  279. XProject "cook.1.4", Change 2                      Page 1
  280. XChange Details                    Sat Mar 27 23:14:20 1993
  281. X
  282. XNAME
  283. X    Project "cook.1.4", Delta 2, Change 2.
  284. X
  285. XSUMMARY
  286. X    cope with missing files better in c_incl
  287. X
  288. XDESCRIPTION
  289. X    cope with missing files better in c_incl
  290. X
  291. X    This change is exempt from testing.  This change is exempt from
  292. X    testing against the baseline.
  293. X
  294. XCAUSE
  295. X    This change was caused by internal_bug.
  296. X
  297. XFILES
  298. X    Type    Action    Edit    File Name
  299. X    ------- ------- ------- -----------
  300. X    source    modify    2    c_incl/sniff.c
  301. X
  302. XHISTORY
  303. X    What        When        Who    Comment
  304. X    ------        ------        -----    ---------
  305. X    new_change    Thu Jan 14    pmiller
  306. X            14:32:13 1993
  307. X    develop_begin    Thu Jan 14    pmiller Elapsed time: 0.054
  308. X            14:32:20 1993        days.
  309. X    develop_end    Thu Jan 14    pmiller
  310. X            14:56:35 1993
  311. X    review_pass    Thu Jan 14    pmiller
  312. X            14:56:41 1993
  313. X    integrate_begin Thu Jan 14    pmiller Elapsed time: 0.078
  314. X            14:57:19 1993        days.
  315. X    integrate_pass    Thu Jan 14    pmiller
  316. X            15:32:31 1993
  317. X
  318. X
  319. X
  320. XProject "cook.1.4", Change 3                      Page 1
  321. XChange Details                    Sat Mar 27 23:14:21 1993
  322. X
  323. XNAME
  324. X    Project "cook.1.4", Delta 3, Change 3.
  325. X
  326. XSUMMARY
  327. X    inprove failure messages from tests
  328. X
  329. XDESCRIPTION
  330. X    1. Tests need to say what failed when they fail.
  331. X    2. tests should not assume /tmp is not a symlink.
  332. X
  333. X    My thanks to J. Cazander, Philips Electronic Design & Tools,
  334. X    The Netherlands, for this suggestion.
  335. X
  336. X    This change is exempt from testing against the baseline.
  337. X
  338. XCAUSE
  339. X    This change was caused by external_enhancement.
  340. X
  341. XFILES
  342. X    Type    Action    Edit    File Name
  343. X    ------- ------- ------- -----------
  344. X    source    modify    2    config
  345. X    test    modify    2    test/00/t0001a.sh
  346. X    test    modify    2    test/00/t0002a.sh
  347. X    test    modify    2    test/00/t0003a.sh
  348. X    test    modify    2    test/00/t0004a.sh
  349. X    test    modify    2    test/00/t0005a.sh
  350. X    test    modify    2    test/00/t0006a.sh
  351. X    test    modify    2    test/00/t0007a.sh
  352. X    test    modify    2    test/00/t0008a.sh
  353. X    test    modify    2    test/00/t0009a.sh
  354. X    test    modify    2    test/00/t0010a.sh
  355. X    test    modify    2    test/00/t0011a.sh
  356. X    test    modify    2    test/00/t0012a.sh
  357. X    test    modify    2    test/00/t0013a.sh
  358. X    test    modify    2    test/00/t0014a.sh
  359. X    test    modify    2    test/00/t0015a.sh
  360. X    test    modify    2    test/00/t0016a.sh
  361. X    test    modify    2    test/00/t0017a.sh
  362. X    test    modify    2    test/00/t0018a.sh
  363. X    test    modify    2    test/00/t0019a.sh
  364. X    test    modify    2    test/00/t0020a.sh
  365. X    test    modify    2    test/00/t0021a.sh
  366. X    test    modify    2    test/00/t0022a.sh
  367. X    test    modify    2    test/00/t0023a.sh
  368. X    test    modify    2    test/00/t0024a.sh
  369. X    test    modify    2    test/00/t0025a.sh
  370. X    test    modify    2    test/00/t0026a.sh
  371. X    test    modify    2    test/00/t0027a.sh
  372. X    test    modify    2    test/00/t0028a.sh
  373. X    test    modify    2    test/00/t0029a.sh
  374. X    test    modify    2    test/00/t0030a.sh
  375. X    test    modify    2    test/00/t0031a.sh
  376. X    test    modify    2    test/00/t0032a.sh
  377. X    test    modify    2    test/00/t0033a.sh
  378. X    test    modify    2    test/00/t0034a.sh
  379. X    test    modify    2    test/00/t0035a.sh
  380. X
  381. X
  382. X
  383. XProject "cook.1.4", Change 3                      Page 2
  384. XChange Details                    Sat Mar 27 23:14:21 1993
  385. X
  386. X    Type    Action    Edit    File Name
  387. X    ------- ------- ------- -----------
  388. X    test    modify    2    test/00/t0036a.sh
  389. X    test    modify    2    test/00/t0037a.sh
  390. X    test    modify    2    test/00/t0038a.sh
  391. X    test    modify    2    test/00/t0039a.sh
  392. X    test    modify    2    test/00/t0040a.sh
  393. X    test    modify    2    test/00/t0041a.sh
  394. X
  395. XHISTORY
  396. X    What        When        Who    Comment
  397. X    ------        ------        -----    ---------
  398. X    new_change    Sat Jan 30    pmiller
  399. X            21:52:55 1993
  400. X    develop_begin    Sat Jan 30    pmiller Elapsed time: 0.122
  401. X            21:53:03 1993        days.
  402. X    develop_end    Sat Jan 30    pmiller
  403. X            22:48:05 1993
  404. X    review_pass    Sat Jan 30    pmiller
  405. X            22:50:03 1993
  406. X    integrate_begin Sat Jan 30    pmiller
  407. X            22:50:52 1993
  408. X    integrate_pass    Sat Jan 30    pmiller
  409. X            23:00:48 1993
  410. X
  411. X
  412. X
  413. XProject "cook.1.4", Change 4                      Page 1
  414. XChange Details                    Sat Mar 27 23:14:21 1993
  415. X
  416. XNAME
  417. X    Project "cook.1.4", Delta 4, Change 4.
  418. X
  419. XSUMMARY
  420. X    getenv name conflict
  421. X
  422. XDESCRIPTION
  423. X    The name getenv is defined in system includ files, and
  424. X    conflicts with the arguments used in the cook implementation.
  425. X
  426. X    My thanks to Adam Krolnik <krolnik@magnum.convex.com> for
  427. X    reporting this problem.
  428. X
  429. X    This change is exempt from testing.  This change is exempt from
  430. X    testing against the baseline.
  431. X
  432. XCAUSE
  433. X    This change was caused by external_bug.
  434. X
  435. XFILES
  436. X    Type    Action    Edit    File Name
  437. X    ------- ------- ------- -----------
  438. X    source    modify    3    config
  439. X    source    modify    2    cook/env.c
  440. X    source    modify    2    cook/env.h
  441. X    source    modify    2    cook/stmt.c
  442. X
  443. XHISTORY
  444. X    What        When        Who    Comment
  445. X    ------        ------        -----    ---------
  446. X    new_change    Thu Feb 18    pmiller
  447. X            14:53:49 1993
  448. X    develop_begin    Thu Feb 18    pmiller Elapsed time: 0.115
  449. X            14:54:41 1993        days.
  450. X    develop_end    Thu Feb 18    pmiller
  451. X            15:46:37 1993
  452. X    review_pass    Thu Feb 18    pmiller
  453. X            15:46:45 1993
  454. X    integrate_begin Thu Feb 18    pmiller Elapsed time: 0.865
  455. X            15:47:15 1993        days.
  456. X    integrate_pass    Thu Feb 18    pmiller
  457. X            22:16:39 1993
  458. X
  459. X
  460. X
  461. XProject "cook.1.4", Change 5                      Page 1
  462. XChange Details                    Sat Mar 27 23:14:22 1993
  463. X
  464. XNAME
  465. X    Project "cook.1.4", Delta 5, Change 5.
  466. X
  467. XSUMMARY
  468. X    more convex improvements
  469. X
  470. XDESCRIPTION
  471. X    There are some bugs in the Convex include files, and some
  472. X    errors in the source of cook, which prevent it building
  473. X    successfully.
  474. X
  475. X    My thanks to Adam Krolnik <krolnik@magnum.convex.com> for
  476. X    reporting this problem.
  477. X
  478. X    This change is exempt from testing.  This change is exempt from
  479. X    testing against the baseline.
  480. X
  481. XCAUSE
  482. X    This change was caused by external_bug.
  483. X
  484. XFILES
  485. X    Type    Action    Edit    File Name
  486. X    ------- ------- ------- -----------
  487. X    source    modify    2    aux/BUILDING.man
  488. X    source    modify    2    cook/expr.c
  489. X    source    modify    2    cook/os.c
  490. X    source    modify    2    cooktime/main.c
  491. X
  492. XHISTORY
  493. X    What        When        Who    Comment
  494. X    ------        ------        -----    ---------
  495. X    new_change    Fri Feb 19    pmiller
  496. X            16:30:01 1993
  497. X    develop_begin    Fri Feb 19    pmiller Elapsed time: 0.155
  498. X            16:30:16 1993        days.
  499. X    develop_end    Fri Feb 19    pmiller Elapsed time: 0.552
  500. X            17:39:58 1993        days.
  501. X    review_pass    Fri Feb 19    pmiller
  502. X            21:48:33 1993
  503. X    integrate_begin Fri Feb 19    pmiller
  504. X            21:49:12 1993
  505. X    integrate_pass    Fri Feb 19    pmiller
  506. X            21:57:28 1993
  507. X
  508. X
  509. X
  510. XProject "cook.1.4", Change 6                      Page 1
  511. XChange Details                    Sat Mar 27 23:14:23 1993
  512. X
  513. XNAME
  514. X    Project "cook.1.4", Delta 6, Change 6.
  515. X
  516. XSUMMARY
  517. X    fix copyright notices
  518. X
  519. XDESCRIPTION
  520. X    fix copyright notices
  521. X
  522. X    This change is exempt from testing against the baseline.
  523. X
  524. XCAUSE
  525. X    This change was caused by internal_enhancement.
  526. X
  527. XFILES
  528. X    Type    Action    Edit    File Name
  529. X    ------- ------- ------- -----------
  530. X    source    modify    3    aux/BUILDING.man
  531. X    source    modify    2    aux/CHANGES.sh
  532. X    source    modify    2    aux/Howto.cook
  533. X    source    modify    2    aux/MANIFEST.sh
  534. X    source    modify    2    aux/Makefile.awk
  535. X    source    modify    2    aux/Makefile.sh
  536. X    source    modify    2    aux/README.man
  537. X    source    modify    2    aux/patches.sh
  538. X    source    modify    2    c_incl/cache.c
  539. X    source    modify    2    c_incl/cache.h
  540. X    source    modify    2    c_incl/lang_c.c
  541. X    source    modify    2    c_incl/lang_roff.c
  542. X    source    modify    2    c_incl/main.c
  543. X    source    modify    2    c_incl/os.c
  544. X    source    modify    2    c_incl/os.h
  545. X    source    modify    3    c_incl/sniff.c
  546. X    source    modify    2    c_incl/sniff.h
  547. X    source    modify    2    common/ansi.c
  548. X    source    modify    2    common/arglex.c
  549. X    source    modify    2    common/arglex.h
  550. X    source    modify    2    common/error.c
  551. X    source    modify    2    common/error.h
  552. X    source    modify    2    common/help.c
  553. X    source    modify    2    common/help.h
  554. X    source    modify    2    common/main.h
  555. X    source    modify    2    common/mem.c
  556. X    source    modify    2    common/mem.h
  557. X    source    modify    2    common/s-v-arg.h
  558. X    source    modify    2    common/str.c
  559. X    source    modify    2    common/str.h
  560. X    source    modify    2    common/trace.c
  561. X    source    modify    2    common/trace.h
  562. X    source    modify    2    common/version.c
  563. X    source    modify    2    common/version.h
  564. X    source    modify    2    common/word.c
  565. X    source    modify    2    common/word.h
  566. X    source    modify    2    conf/ConvexOS-10
  567. X    source    modify    2    conf/SunOS-4.1.2
  568. X    source    modify    2    conf/SunOS-4.1.3
  569. X    source    modify    2    conf/SysV-4.0
  570. X
  571. X
  572. X
  573. XProject "cook.1.4", Change 6                      Page 2
  574. XChange Details                    Sat Mar 27 23:14:23 1993
  575. X
  576. X    Type    Action    Edit    File Name
  577. X    ------- ------- ------- -----------
  578. X    source    modify    2    conf/dgux-5.4.1
  579. X    source    modify    4    config
  580. X    source    modify    2    cook/builtin.c
  581. X    source    modify    2    cook/builtin.h
  582. X    source    modify    2    cook/cook.c
  583. X    source    modify    2    cook/cook.h
  584. X    source    modify    3    cook/env.c
  585. X    source    modify    3    cook/env.h
  586. X    source    modify    3    cook/expr.c
  587. X    source    modify    2    cook/expr.h
  588. X    source    modify    2    cook/glob.c
  589. X    source    modify    2    cook/glob.h
  590. X    source    modify    2    cook/hashline.h
  591. X    source    modify    2    cook/hashline.y
  592. X    source    modify    2    cook/id.c
  593. X    source    modify    2    cook/id.h
  594. X    source    modify    2    cook/lex.c
  595. X    source    modify    2    cook/lex.h
  596. X    source    modify    2    cook/listing.c
  597. X    source    modify    2    cook/listing.h
  598. X    source    modify    2    cook/main.c
  599. X    source    modify    2    cook/match.c
  600. X    source    modify    2    cook/match.h
  601. X    source    modify    2    cook/option.c
  602. X    source    modify    2    cook/option.h
  603. X    source    modify    3    cook/os.c
  604. X    source    modify    2    cook/os.h
  605. X    source    modify    2    cook/parse.h
  606. X    source    modify    2    cook/parse.y
  607. X    source    modify    3    cook/stmt.c
  608. X    source    modify    2    cook/stmt.h
  609. X    source    modify    2    doc/builtin
  610. X    source    modify    2    doc/cmdline
  611. X    source    modify    2    doc/conditions
  612. X    source    modify    2    doc/glossary
  613. X    source    modify    2    doc/history
  614. X    source    modify    2    doc/how
  615. X    source    modify    2    doc/intro
  616. X    source    modify    2    doc/intro.aa
  617. X    source    modify    2    doc/intro.bb
  618. X    source    modify    2    doc/language
  619. X    source    modify    2    doc/match
  620. X    source    modify    2    doc/option
  621. X    source    modify    2    doc/refman.t
  622. X    source    modify    2    doc/system
  623. X    source    modify    2    doc/variables
  624. X    source    modify    2    find_libs/main.c
  625. X    source    modify    2    find_libs/os.c
  626. X    source    modify    2    find_libs/os.h
  627. X    source    modify    2    man1/c_incl.1
  628. X    source    modify    2    man1/cook.1
  629. X    source    modify    2    man1/cooktime.1
  630. X    source    modify    2    man1/find_libs.1
  631. X    source    create    1    man1/install.sh
  632. X    source    modify    2    man1/roffpp.1
  633. X
  634. X
  635. X
  636. XProject "cook.1.4", Change 6                      Page 3
  637. XChange Details                    Sat Mar 27 23:14:23 1993
  638. X
  639. X    Type    Action    Edit    File Name
  640. X    ------- ------- ------- -----------
  641. X    source    modify    2    roffpp/main.c
  642. X    source    modify    2    roffpp/preprocess.c
  643. X    source    modify    2    roffpp/preprocess.h
  644. X    test    modify    3    test/00/t0001a.sh
  645. X    test    modify    3    test/00/t0002a.sh
  646. X    test    modify    3    test/00/t0003a.sh
  647. X    test    modify    3    test/00/t0004a.sh
  648. X    test    modify    3    test/00/t0005a.sh
  649. X    test    modify    3    test/00/t0006a.sh
  650. X    test    modify    3    test/00/t0007a.sh
  651. X    test    modify    3    test/00/t0008a.sh
  652. X    test    modify    3    test/00/t0009a.sh
  653. X    test    modify    3    test/00/t0010a.sh
  654. X    test    modify    3    test/00/t0011a.sh
  655. X    test    modify    3    test/00/t0012a.sh
  656. X    test    modify    3    test/00/t0013a.sh
  657. X    test    modify    3    test/00/t0014a.sh
  658. X    test    modify    3    test/00/t0015a.sh
  659. X    test    modify    3    test/00/t0016a.sh
  660. X    test    modify    3    test/00/t0017a.sh
  661. X    test    modify    3    test/00/t0018a.sh
  662. X    test    modify    3    test/00/t0019a.sh
  663. X    test    modify    3    test/00/t0020a.sh
  664. X    test    modify    3    test/00/t0021a.sh
  665. X    test    modify    3    test/00/t0022a.sh
  666. X    test    modify    3    test/00/t0023a.sh
  667. X    test    modify    3    test/00/t0024a.sh
  668. X    test    modify    3    test/00/t0025a.sh
  669. X    test    modify    3    test/00/t0026a.sh
  670. X    test    modify    3    test/00/t0027a.sh
  671. X    test    modify    3    test/00/t0028a.sh
  672. X    test    modify    3    test/00/t0029a.sh
  673. X    test    modify    3    test/00/t0030a.sh
  674. X    test    modify    3    test/00/t0031a.sh
  675. X    test    modify    3    test/00/t0032a.sh
  676. X    test    modify    3    test/00/t0033a.sh
  677. X    test    modify    3    test/00/t0034a.sh
  678. X    test    modify    3    test/00/t0035a.sh
  679. X    test    modify    3    test/00/t0036a.sh
  680. X    test    modify    3    test/00/t0037a.sh
  681. X    test    modify    3    test/00/t0038a.sh
  682. X    test    modify    3    test/00/t0039a.sh
  683. X    test    modify    3    test/00/t0040a.sh
  684. X    test    modify    3    test/00/t0041a.sh
  685. X
  686. XHISTORY
  687. X    What        When        Who    Comment
  688. X    ------        ------        -----    ---------
  689. X    new_change    Mon Mar 22    pmiller
  690. X            12:49:07 1993
  691. X    develop_begin    Mon Mar 22    pmiller Elapsed time: 0.000
  692. X            12:49:24 1993        days.
  693. X    develop_end    Mon Mar 22    pmiller
  694. X            21:35:50 1993
  695. X    review_pass    Mon Mar 22    pmiller
  696. X
  697. X
  698. X
  699. XProject "cook.1.4", Change 6                      Page 4
  700. XChange Details                    Sat Mar 27 23:14:23 1993
  701. X
  702. X    What        When        Who    Comment
  703. X    ------        ------        -----    ---------
  704. X            21:35:57 1993
  705. X    integrate_begin Mon Mar 22    pmiller Elapsed time: 0.074
  706. X            21:36:51 1993        days.
  707. X    integrate_pass    Mon Mar 22    pmiller
  708. X            22:10:07 1993
  709. X
  710. X
  711. X
  712. XProject "cook.1.4", Change 7                      Page 1
  713. XChange Details                    Sat Mar 27 23:14:24 1993
  714. X
  715. XNAME
  716. X    Project "cook.1.4", Delta 7, Change 7.
  717. X
  718. XSUMMARY
  719. X    fix license version
  720. X
  721. XDESCRIPTION
  722. X    fix license version
  723. X
  724. X    This change is exempt from testing against the baseline.
  725. X
  726. XCAUSE
  727. X    This change was caused by internal_enhancement.
  728. X
  729. XFILES
  730. X    Type    Action    Edit    File Name
  731. X    ------- ------- ------- -----------
  732. X    source    remove    1    COPYING
  733. X    source    create    1    LICENSE
  734. X    source    modify    4    aux/BUILDING.man
  735. X    source    modify    3    aux/CHANGES.sh
  736. X    source    modify    3    aux/Howto.cook
  737. X    source    modify    3    aux/MANIFEST.sh
  738. X    source    modify    3    aux/Makefile.awk
  739. X    source    modify    3    aux/Makefile.sh
  740. X    source    modify    3    aux/README.man
  741. X    source    modify    3    aux/patches.sh
  742. X    source    modify    3    c_incl/cache.c
  743. X    source    modify    3    c_incl/cache.h
  744. X    source    modify    3    c_incl/lang_c.c
  745. X    source    modify    3    c_incl/lang_roff.c
  746. X    source    modify    3    c_incl/main.c
  747. X    source    modify    3    c_incl/os.c
  748. X    source    modify    3    c_incl/os.h
  749. X    source    modify    4    c_incl/sniff.c
  750. X    source    modify    3    c_incl/sniff.h
  751. X    source    modify    3    common/ansi.c
  752. X    source    modify    3    common/arglex.c
  753. X    source    modify    3    common/arglex.h
  754. X    source    modify    3    common/error.c
  755. X    source    modify    3    common/error.h
  756. X    source    modify    3    common/help.c
  757. X    source    modify    3    common/help.h
  758. X    source    modify    3    common/main.h
  759. X    source    modify    3    common/mem.c
  760. X    source    modify    3    common/mem.h
  761. X    source    modify    3    common/s-v-arg.h
  762. X    source    modify    3    common/str.c
  763. X    source    modify    3    common/str.h
  764. X    source    modify    3    common/trace.c
  765. X    source    modify    3    common/trace.h
  766. X    source    modify    3    common/version.c
  767. X    source    modify    3    common/version.h
  768. X    source    modify    3    common/word.c
  769. X    source    modify    3    common/word.h
  770. X    source    modify    3    conf/ConvexOS-10
  771. X    source    modify    3    conf/SunOS-4.1.2
  772. X
  773. X
  774. X
  775. XProject "cook.1.4", Change 7                      Page 2
  776. XChange Details                    Sat Mar 27 23:14:24 1993
  777. X
  778. X    Type    Action    Edit    File Name
  779. X    ------- ------- ------- -----------
  780. X    source    modify    3    conf/SunOS-4.1.3
  781. X    source    modify    3    conf/SysV-4.0
  782. X    source    modify    3    conf/dgux-5.4.1
  783. X    source    modify    5    config
  784. X    source    modify    3    cook/builtin.c
  785. X    source    modify    3    cook/builtin.h
  786. X    source    modify    3    cook/cook.c
  787. X    source    modify    3    cook/cook.h
  788. X    source    modify    4    cook/env.c
  789. X    source    modify    4    cook/env.h
  790. X    source    modify    4    cook/expr.c
  791. X    source    modify    3    cook/expr.h
  792. X    source    modify    3    cook/glob.c
  793. X    source    modify    3    cook/glob.h
  794. X    source    modify    3    cook/hashline.h
  795. X    source    modify    3    cook/hashline.y
  796. X    source    modify    3    cook/id.c
  797. X    source    modify    3    cook/id.h
  798. X    source    modify    3    cook/lex.c
  799. X    source    modify    3    cook/lex.h
  800. X    source    modify    3    cook/listing.c
  801. X    source    modify    3    cook/listing.h
  802. X    source    modify    3    cook/main.c
  803. X    source    modify    3    cook/match.c
  804. X    source    modify    3    cook/match.h
  805. X    source    modify    3    cook/option.c
  806. X    source    modify    3    cook/option.h
  807. X    source    modify    4    cook/os.c
  808. X    source    modify    3    cook/os.h
  809. X    source    modify    3    cook/parse.h
  810. X    source    modify    3    cook/parse.y
  811. X    source    modify    4    cook/stmt.c
  812. X    source    modify    3    cook/stmt.h
  813. X    source    modify    2    cooktime/date.h
  814. X    source    modify    2    cooktime/date.y
  815. X    source    modify    3    cooktime/main.c
  816. X    source    modify    3    doc/builtin
  817. X    source    modify    3    doc/cmdline
  818. X    source    modify    3    doc/conditions
  819. X    source    modify    3    doc/glossary
  820. X    source    modify    3    doc/history
  821. X    source    modify    3    doc/how
  822. X    source    modify    3    doc/intro
  823. X    source    modify    3    doc/intro.aa
  824. X    source    modify    3    doc/intro.bb
  825. X    source    modify    3    doc/language
  826. X    source    modify    3    doc/match
  827. X    source    modify    3    doc/option
  828. X    source    modify    3    doc/refman.t
  829. X    source    modify    3    doc/system
  830. X    source    modify    3    doc/variables
  831. X    source    modify    3    find_libs/main.c
  832. X    source    modify    3    find_libs/os.c
  833. X    source    modify    3    find_libs/os.h
  834. X    source    modify    3    man1/c_incl.1
  835. X
  836. X
  837. X
  838. XProject "cook.1.4", Change 7                      Page 3
  839. XChange Details                    Sat Mar 27 23:14:24 1993
  840. X
  841. X    Type    Action    Edit    File Name
  842. X    ------- ------- ------- -----------
  843. X    source    modify    3    man1/cook.1
  844. X    source    modify    3    man1/cooktime.1
  845. X    source    modify    3    man1/find_libs.1
  846. X    source    modify    2    man1/install.sh
  847. X    source    modify    3    man1/roffpp.1
  848. X    source    modify    3    roffpp/main.c
  849. X    source    modify    3    roffpp/preprocess.c
  850. X    source    modify    3    roffpp/preprocess.h
  851. X    test    modify    4    test/00/t0001a.sh
  852. X    test    modify    4    test/00/t0002a.sh
  853. X    test    modify    4    test/00/t0003a.sh
  854. X    test    modify    4    test/00/t0004a.sh
  855. X    test    modify    4    test/00/t0005a.sh
  856. X    test    modify    4    test/00/t0006a.sh
  857. X    test    modify    4    test/00/t0007a.sh
  858. X    test    modify    4    test/00/t0008a.sh
  859. X    test    modify    4    test/00/t0009a.sh
  860. X    test    modify    4    test/00/t0010a.sh
  861. X    test    modify    4    test/00/t0011a.sh
  862. X    test    modify    4    test/00/t0012a.sh
  863. X    test    modify    4    test/00/t0013a.sh
  864. X    test    modify    4    test/00/t0014a.sh
  865. X    test    modify    4    test/00/t0015a.sh
  866. X    test    modify    4    test/00/t0016a.sh
  867. X    test    modify    4    test/00/t0017a.sh
  868. X    test    modify    4    test/00/t0018a.sh
  869. X    test    modify    4    test/00/t0019a.sh
  870. X    test    modify    4    test/00/t0020a.sh
  871. X    test    modify    4    test/00/t0021a.sh
  872. X    test    modify    4    test/00/t0022a.sh
  873. X    test    modify    4    test/00/t0023a.sh
  874. X    test    modify    4    test/00/t0024a.sh
  875. X    test    modify    4    test/00/t0025a.sh
  876. X    test    modify    4    test/00/t0026a.sh
  877. X    test    modify    4    test/00/t0027a.sh
  878. X    test    modify    4    test/00/t0028a.sh
  879. X    test    modify    4    test/00/t0029a.sh
  880. X    test    modify    4    test/00/t0030a.sh
  881. X    test    modify    4    test/00/t0031a.sh
  882. X    test    modify    4    test/00/t0032a.sh
  883. X    test    modify    4    test/00/t0033a.sh
  884. X    test    modify    4    test/00/t0034a.sh
  885. X    test    modify    4    test/00/t0035a.sh
  886. X    test    modify    4    test/00/t0036a.sh
  887. X    test    modify    4    test/00/t0037a.sh
  888. X    test    modify    4    test/00/t0038a.sh
  889. X    test    modify    4    test/00/t0039a.sh
  890. X    test    modify    4    test/00/t0040a.sh
  891. X    test    modify    4    test/00/t0041a.sh
  892. X
  893. XHISTORY
  894. X    What        When        Who    Comment
  895. X    ------        ------        -----    ---------
  896. X    new_change    Mon Mar 22    pmiller
  897. X            22:15:10 1993
  898. X
  899. X
  900. X
  901. XProject "cook.1.4", Change 7                      Page 4
  902. XChange Details                    Sat Mar 27 23:14:24 1993
  903. X
  904. X    What        When        Who    Comment
  905. X    ------        ------        -----    ---------
  906. X    develop_begin    Mon Mar 22    pmiller Elapsed time: 0.000
  907. X            22:15:20 1993        days.
  908. X    develop_end    Tue Mar 23    pmiller
  909. X            09:07:47 1993
  910. X    review_pass    Tue Mar 23    pmiller
  911. X            09:15:14 1993
  912. X    integrate_begin Tue Mar 23    pmiller Elapsed time: 0.086
  913. X            09:15:53 1993        days.
  914. X    integrate_pass    Tue Mar 23    pmiller
  915. X            09:54:45 1993
  916. X
  917. X
  918. X
  919. XProject "cook.1.4", Change 8                      Page 1
  920. XChange Details                    Sat Mar 27 23:14:25 1993
  921. X
  922. XNAME
  923. X    Project "cook.1.4", Delta 8, Change 8.
  924. X
  925. XSUMMARY
  926. X    use _ty suffix, not _t suffix
  927. X
  928. XDESCRIPTION
  929. X    The ANSI C and POSIX standards reserve the _t suffix.  The most
  930. X    unlikely collisions have been observed.
  931. X
  932. X    This change is exempt from testing.  This change is exempt from
  933. X    testing against the baseline.
  934. X
  935. XCAUSE
  936. X    This change was caused by internal_enhancement.
  937. X
  938. XFILES
  939. X    Type    Action    Edit    File Name
  940. X    ------- ------- ------- -----------
  941. X    source    modify    4    c_incl/cache.c
  942. X    source    modify    4    c_incl/cache.h
  943. X    source    modify    4    c_incl/lang_c.c
  944. X    source    modify    4    c_incl/lang_roff.c
  945. X    source    modify    4    c_incl/main.c
  946. X    source    modify    5    c_incl/sniff.c
  947. X    source    modify    4    c_incl/sniff.h
  948. X    source    modify    4    common/arglex.c
  949. X    source    modify    4    common/arglex.h
  950. X    source    modify    4    common/error.c
  951. X    source    modify    4    common/error.h
  952. X    source    modify    4    common/str.c
  953. X    source    modify    4    common/str.h
  954. X    source    modify    4    common/trace.c
  955. X    source    modify    4    common/version.c
  956. X    source    modify    4    common/word.c
  957. X    source    modify    4    common/word.h
  958. X    source    modify    4    cook/builtin.c
  959. X    source    modify    4    cook/cook.c
  960. X    source    modify    4    cook/cook.h
  961. X    source    modify    5    cook/expr.c
  962. X    source    modify    4    cook/expr.h
  963. X    source    modify    4    cook/glob.c
  964. X    source    modify    4    cook/hashline.y
  965. X    source    modify    4    cook/id.c
  966. X    source    modify    4    cook/id.h
  967. X    source    modify    4    cook/lex.c
  968. X    source    modify    4    cook/lex.h
  969. X    source    modify    4    cook/listing.c
  970. X    source    modify    4    cook/main.c
  971. X    source    modify    4    cook/match.c
  972. X    source    modify    4    cook/match.h
  973. X    source    modify    4    cook/option.c
  974. X    source    modify    4    cook/option.h
  975. X    source    modify    5    cook/os.c
  976. X    source    modify    4    cook/os.h
  977. X    source    modify    4    cook/parse.h
  978. X    source    modify    4    cook/parse.y
  979. X
  980. X
  981. X
  982. XProject "cook.1.4", Change 8                      Page 2
  983. XChange Details                    Sat Mar 27 23:14:25 1993
  984. X
  985. X    Type    Action    Edit    File Name
  986. X    ------- ------- ------- -----------
  987. X    source    modify    5    cook/stmt.c
  988. X    source    modify    4    cook/stmt.h
  989. X    source    modify    4    cooktime/main.c
  990. X    source    modify    4    find_libs/main.c
  991. X    source    modify    4    roffpp/main.c
  992. X    source    modify    4    roffpp/preprocess.c
  993. X
  994. XHISTORY
  995. X    What        When        Who    Comment
  996. X    ------        ------        -----    ---------
  997. X    new_change    Tue Mar 23    pmiller
  998. X            12:10:52 1993
  999. X    develop_begin    Tue Mar 23    pmiller Elapsed time: 1.090
  1000. X            12:11:04 1993        days.
  1001. X    develop_end    Wed Mar 24    pmiller
  1002. X            12:51:44 1993
  1003. X    review_pass    Wed Mar 24    pmiller
  1004. X            12:52:03 1993
  1005. X    integrate_begin Wed Mar 24    pmiller Elapsed time: 0.128
  1006. X            12:52:43 1993        days.
  1007. X    integrate_pass    Wed Mar 24    pmiller
  1008. X            13:50:27 1993
  1009. X
  1010. X
  1011. X
  1012. XProject "cook.1.4", Change 9                      Page 1
  1013. XChange Details                    Sat Mar 27 23:14:27 1993
  1014. X
  1015. XNAME
  1016. X    Project "cook.1.4", Delta 9, Change 9.
  1017. X
  1018. XSUMMARY
  1019. X    add GNU style long option names
  1020. X
  1021. XDESCRIPTION
  1022. X    All command oine option names in cook are long, so this is not
  1023. X    very useful.  The double '--' is replaced with a single '-'.
  1024. X    The --foo=bar syntax is also supported
  1025. X
  1026. X    This change is exempt from testing.  This change is exempt from
  1027. X    testing against the baseline.
  1028. X
  1029. XCAUSE
  1030. X    This change was caused by internal_enhancement.
  1031. X
  1032. XFILES
  1033. X    Type    Action    Edit    File Name
  1034. X    ------- ------- ------- -----------
  1035. X    source    modify    5    c_incl/main.c
  1036. X    source    modify    5    common/arglex.c
  1037. X    source    modify    5    common/arglex.h
  1038. X    source    modify    4    common/help.c
  1039. X    source    modify    5    common/version.c
  1040. X    source    modify    5    cook/main.c
  1041. X    source    modify    5    cooktime/main.c
  1042. X    source    modify    5    find_libs/main.c
  1043. X    source    modify    5    roffpp/main.c
  1044. X
  1045. XHISTORY
  1046. X    What        When        Who    Comment
  1047. X    ------        ------        -----    ---------
  1048. X    new_change    Wed Mar 24    pmiller
  1049. X            13:54:14 1993
  1050. X    develop_begin    Wed Mar 24    pmiller Elapsed time: 0.000
  1051. X            13:54:23 1993        days.
  1052. X    develop_end    Wed Mar 24    pmiller
  1053. X            22:35:19 1993
  1054. X    review_pass    Wed Mar 24    pmiller
  1055. X            22:35:26 1993
  1056. X    integrate_begin Wed Mar 24    pmiller
  1057. X            22:36:09 1993
  1058. X    integrate_pass    Wed Mar 24    pmiller
  1059. X            22:45:34 1993
  1060. X
  1061. X
  1062. X
  1063. XProject "cook.1.4", Change 10                      Page 1
  1064. XChange Details                    Sat Mar 27 23:14:32 1993
  1065. X
  1066. XNAME
  1067. X    Project "cook.1.4", Delta 10, Change 10.
  1068. X
  1069. XSUMMARY
  1070. X    sundry improvements
  1071. X
  1072. XDESCRIPTION
  1073. X    Several improvements were made to "polish" the program in
  1074. X    preparation for posting another rev.
  1075. X    1. improve the README file
  1076. X    2. improve the BUILDING file
  1077. X    3. improve the tar file
  1078. X    4. Improve the Makefile file
  1079. X
  1080. X    This change is exempt from testing.  This change is exempt from
  1081. X    testing against the baseline.
  1082. X
  1083. XCAUSE
  1084. X    This change was caused by internal_enhancement.
  1085. X
  1086. XFILES
  1087. X    Type    Action    Edit    File Name
  1088. X    ------- ------- ------- -----------
  1089. X    source    modify    5    aux/BUILDING.man
  1090. X    source    modify    4    aux/Howto.cook
  1091. X    source    modify    4    aux/Makefile.sh
  1092. X    source    modify    4    aux/README.man
  1093. X    source    modify    6    config
  1094. X
  1095. XHISTORY
  1096. X    What        When        Who    Comment
  1097. X    ------        ------        -----    ---------
  1098. X    new_change    Wed Mar 24    pmiller
  1099. X            22:47:28 1993
  1100. X    develop_begin    Wed Mar 24    pmiller Elapsed time: 0.000
  1101. X            22:47:33 1993        days.
  1102. X    develop_end    Thu Mar 25    pmiller
  1103. X            10:12:20 1993
  1104. X    review_pass    Thu Mar 25    pmiller
  1105. X            10:12:26 1993
  1106. X    integrate_begin Thu Mar 25    pmiller Elapsed time: 0.094
  1107. X            10:12:56 1993        days.
  1108. X    integrate_pass    Thu Mar 25    pmiller
  1109. X            10:55:13 1993
  1110. X
  1111. X
  1112. X
  1113. XProject "cook.1.4", Change 11                      Page 1
  1114. XChange Details                    Sat Mar 27 23:14:34 1993
  1115. X
  1116. XNAME
  1117. X    Project "cook.1.4", Delta 11, Change 11.
  1118. X
  1119. XSUMMARY
  1120. X    ports to more platforms
  1121. X
  1122. XDESCRIPTION
  1123. X    Add support for Pyramid, and correct some small problems found
  1124. X    while poting.
  1125. X
  1126. X    This change is exempt from testing against the baseline.
  1127. X
  1128. XCAUSE
  1129. X    This change was caused by internal_enhancement.
  1130. X
  1131. XFILES
  1132. X    Type    Action    Edit    File Name
  1133. X    ------- ------- ------- -----------
  1134. X    source    modify    6    aux/BUILDING.man
  1135. X    source    modify    5    aux/Makefile.sh
  1136. X    source    modify    4    conf/ConvexOS-10
  1137. X    source    modify    4    conf/SunOS-4.1.2
  1138. X    source    modify    4    conf/SunOS-4.1.3
  1139. X    source    modify    4    conf/SysV-4.0
  1140. X    source    create    1    conf/ULTRIX-4.2
  1141. X    source    create    1    conf/dcosx
  1142. X    source    modify    4    conf/dgux-5.4.1
  1143. X    source    modify    5    cook/glob.c
  1144. X    source    modify    6    cook/os.c
  1145. X    source    modify    3    cooktime/date.y
  1146. X    test    modify    5    test/00/t0041a.sh
  1147. X
  1148. XHISTORY
  1149. X    What        When        Who    Comment
  1150. X    ------        ------        -----    ---------
  1151. X    new_change    Thu Mar 25    pmiller
  1152. X            12:05:16 1993
  1153. X    develop_begin    Thu Mar 25    pmiller Elapsed time: 0.226
  1154. X            12:05:31 1993        days.
  1155. X    develop_end    Thu Mar 25    pmiller
  1156. X            13:47:26 1993
  1157. X    develop_end_    Thu Mar 25    pmiller
  1158. X    undo        13:48:50 1993
  1159. X    develop_end    Thu Mar 25    pmiller
  1160. X            13:50:24 1993
  1161. X    review_pass    Thu Mar 25    pmiller
  1162. X            13:51:41 1993
  1163. X    integrate_begin Thu Mar 25    pmiller Elapsed time: 0.000
  1164. X            13:52:38 1993        days.
  1165. X    integrate_pass    Thu Mar 25    pmiller
  1166. X            21:49:11 1993
  1167. X
  1168. X
  1169. X
  1170. XProject "cook.1.4", Change 12                      Page 1
  1171. XChange Details                    Sat Mar 27 23:14:37 1993
  1172. X
  1173. XNAME
  1174. X    Project "cook.1.4", Delta 12, Change 12.
  1175. X
  1176. XSUMMARY
  1177. X    improve the manual pages
  1178. X
  1179. XDESCRIPTION
  1180. X    Correct some small problems and make some minor improvements,
  1181. X    including:
  1182. X    1. put a better email address in the shar files.
  1183. X    2. have the manual entries explain abbreviations better
  1184. X    3. have the help within the commands reflect the man pages
  1185. X
  1186. X    This change is exempt from testing.  This change is exempt from
  1187. X    testing against the baseline.
  1188. X
  1189. XCAUSE
  1190. X    This change was caused by internal_enhancement.
  1191. X
  1192. XFILES
  1193. X    Type    Action    Edit    File Name
  1194. X    ------- ------- ------- -----------
  1195. X    source    modify    5    aux/Howto.cook
  1196. X    source    modify    6    c_incl/main.c
  1197. X    source    modify    7    config
  1198. X    source    modify    6    cook/main.c
  1199. X    source    modify    6    cooktime/main.c
  1200. X    source    modify    6    find_libs/main.c
  1201. X    source    modify    4    man1/c_incl.1
  1202. X    source    modify    4    man1/cook.1
  1203. X    source    modify    4    man1/cooktime.1
  1204. X    source    create    1    man1/copyright.so
  1205. X    source    modify    4    man1/find_libs.1
  1206. X    source    modify    3    man1/install.sh
  1207. X    source    create    1    man1/o__rules.so
  1208. X    source    modify    4    man1/roffpp.1
  1209. X    source    modify    6    roffpp/main.c
  1210. X
  1211. XHISTORY
  1212. X    What        When        Who    Comment
  1213. X    ------        ------        -----    ---------
  1214. X    new_change    Thu Mar 25    pmiller
  1215. X            21:51:15 1993
  1216. X    develop_begin    Thu Mar 25    pmiller Elapsed time: 1.115
  1217. X            21:51:19 1993        days.
  1218. X    develop_end    Fri Mar 26    pmiller
  1219. X            22:42:58 1993
  1220. X    review_pass    Fri Mar 26    pmiller
  1221. X            22:43:05 1993
  1222. X    integrate_begin Fri Mar 26    pmiller Elapsed time: 0.061
  1223. X            22:43:40 1993        days.
  1224. X    integrate_pass    Fri Mar 26    pmiller
  1225. X            23:11:17 1993
  1226. X
  1227. X
  1228. X
  1229. XProject "cook.1.4", Change 13                      Page 1
  1230. XChange Details                    Sat Mar 27 23:14:39 1993
  1231. X
  1232. XNAME
  1233. X    Project "cook.1.4", Delta 13, Change 13.
  1234. X
  1235. XSUMMARY
  1236. X    note ConvexOS as a known port
  1237. X
  1238. XDESCRIPTION
  1239. X    Checks that ConvexOS works, note comments in Makefile
  1240. X
  1241. X    This change is exempt from testing.  This change is exempt from
  1242. X    testing against the baseline.
  1243. X
  1244. XCAUSE
  1245. X    This change was caused by internal_enhancement.
  1246. X
  1247. XSTATE
  1248. X    This change is in 'being_integrated' state.
  1249. X
  1250. XFILES
  1251. X    Type    Action    Edit    File Name
  1252. X    ------- ------- ------- -----------
  1253. X    source    modify    6    aux/BUILDING.man
  1254. X    source    modify    5    aux/Makefile.sh
  1255. X    source    modify    4    aux/README.man
  1256. X
  1257. XHISTORY
  1258. X    What        When        Who    Comment
  1259. X    ------        ------        -----    ---------
  1260. X    new_change    Fri Mar 26    pmiller
  1261. X            23:22:24 1993
  1262. X    develop_begin    Fri Mar 26    pmiller Elapsed time: 0.962
  1263. X            23:22:33 1993        days.
  1264. X    develop_end    Sat Mar 27    pmiller
  1265. X            23:05:24 1993
  1266. X    review_pass    Sat Mar 27    pmiller
  1267. X            23:05:34 1993
  1268. X    integrate_begin Sat Mar 27    pmiller
  1269. X            23:06:04 1993
  1270. END_OF_FILE
  1271. if test 33082 -ne `wc -c <'CHANGES'`; then
  1272.     echo shar: \"'CHANGES'\" unpacked with wrong size!
  1273. fi
  1274. # end of 'CHANGES'
  1275. fi
  1276. if test -f 'cook/cook.c' -a "${1}" != "-c" ; then 
  1277.   echo shar: Will not clobber existing file \"'cook/cook.c'\"
  1278. else
  1279. echo shar: Extracting \"'cook/cook.c'\" \(30507 characters\)
  1280. sed "s/^X//" >'cook/cook.c' <<'END_OF_FILE'
  1281. X/*
  1282. X *    cook - file construction tool
  1283. X *    Copyright (C) 1990, 1991, 1992, 1993 Peter Miller.
  1284. X *    All rights reserved.
  1285. X *
  1286. X *    This program is free software; you can redistribute it and/or modify
  1287. X *    it under the terms of the GNU General Public License as published by
  1288. X *    the Free Software Foundation; either version 2 of the License, or
  1289. X *    (at your option) any later version.
  1290. X *
  1291. X *    This program is distributed in the hope that it will be useful,
  1292. X *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  1293. X *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  1294. X *    GNU General Public License for more details.
  1295. X *
  1296. X *    You should have received a copy of the GNU General Public License
  1297. X *    along with this program; if not, write to the Free Software
  1298. X *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  1299. X *
  1300. X * MANIFEST: functions to cook targets
  1301. X *
  1302. X * the kitchen
  1303. X *
  1304. X * This file contains the part of cook that actually decides which
  1305. X * recipes will be cooked.
  1306. X *
  1307. X * When cook has a target, cook performs the following actions in the order
  1308. X * given:
  1309. X *
  1310. X * 1.    Cook scans through the instanciated prerequisite recipes. All
  1311. X *    prerequisite recipes with the target in their target list are used.
  1312. X *
  1313. X *    If the recipe is used, any prerequisite files are recursively
  1314. X *    cooked, then if any of the prerequisite files were out of date, then
  1315. X *    all other explicit or implicit recipes with the same target will be
  1316. X *    deemed to be out of date.
  1317. X *
  1318. X * 2.    Cook then scans through the instanciated explicit recipes. All
  1319. X *    explicit recipes with the target in their target list are used.
  1320. X *
  1321. X *    If the recipe is used, any prerequisite files are recursively
  1322. X *    cooked, then if any prerequisites were out of date (including those
  1323. X *    of prerequisite recipes) then the actions bound to this recipe will
  1324. X *    be evaluated.
  1325. X *
  1326. X * 3.    If the target was not the subject of any explicit recipe, cook then
  1327. X *    scans the instanciated implicit recipes. Only first implicit recipe
  1328. X *    for which cook knows how to cook will be used.
  1329. X *
  1330. X *    Implicit recipe targets and prerequisites may contain a wilcard
  1331. X *    character (%), which is why they are implicit. If more than one
  1332. X *    wildcard character appears, only the last is considered the wilcard
  1333. X *    charcater.
  1334. X *
  1335. X *    If an implicit recipe is used, when expressions are evaluaded into
  1336. X *    word lists, any word containing the wildcard charcater (%) will be
  1337. X *    expanded out by the current wildcard expansion.
  1338. X *
  1339. X * 4.    If the target is not the subject of any prerequisite or explicit
  1340. X *    recipe, and no implicit recipes can be applied, then two things can
  1341. X *    happen.
  1342. X *        a. If the file exists, then it is up to date, or
  1343. X *        b. If the file does not exist then cook doesn't know how.
  1344. X *
  1345. X * If a command in the actions bound to any recipe fail, cook will not
  1346. X * evaluate those actions any further, and will not evaluate the actions
  1347. X * of any recipe for which the target of the failed actions was a
  1348. X * prerequisite.
  1349. X *
  1350. X * Cook will trap recursive looping of targets. If a recursion loop is
  1351. X * detected, then
  1352. X *    1. If the file exists, the it is up to date, or
  1353. X *    2. If the file does not exist then cook doesn't know how.
  1354. X */
  1355. X
  1356. X#include <stddef.h>
  1357. X#include <stdio.h>
  1358. X#include <time.h>
  1359. X#include <signal.h>
  1360. X
  1361. X#include <cook.h>
  1362. X#include <error.h>
  1363. X#include <id.h>
  1364. X#include <main.h>
  1365. X#include <match.h>
  1366. X#include <mem.h>
  1367. X#include <option.h>
  1368. X#include <os.h>
  1369. X#include <trace.h>
  1370. X
  1371. X
  1372. Xrlist        explicit;    /* the explicit recipes */
  1373. Xrlist        implicit;    /* the implicit recipes */
  1374. Xstatic int    max_tag;
  1375. Xint        desist;
  1376. X
  1377. X
  1378. X/*
  1379. X * NAME
  1380. X *    interrupt - handle interrupts by signals
  1381. X *
  1382. X * SYNOPSIS
  1383. X *    void interrupt(int);
  1384. X *
  1385. X * DESCRIPTION
  1386. X *    The interrupt function is used to set the appropriate flags when an
  1387. X *    interrupt occurs.
  1388. X *
  1389. X * RETURNS
  1390. X *    void
  1391. X *
  1392. X * CAVEAT
  1393. X *    Don't use to extravagantly, because it just returns!
  1394. X */
  1395. X
  1396. Xstatic void interrupt _((int));
  1397. X
  1398. Xstatic void
  1399. Xinterrupt(n)
  1400. X    int        n;
  1401. X{
  1402. X    desist++;
  1403. X    error("interrupted by %s", signal_name(n));
  1404. X    option_set_errors();
  1405. X    signal(n, interrupt);
  1406. X}
  1407. X
  1408. X
  1409. X/*
  1410. X * NAME
  1411. X *    recipe_tag - make next one
  1412. X *
  1413. X * SYNOPSIS
  1414. X *    int recipe_tag(void);
  1415. X *
  1416. X * DESCRIPTION
  1417. X *    The recipe_tag function is used to generate successive recipe tages.
  1418. X *    Recipe tags are used during the -trace output to indicate which recipe
  1419. X *    is in use.  Recipes are not necessarily instanciated in the order in
  1420. X *    which they appear in the source file, hence the tagging.
  1421. X *
  1422. X * RETURNS
  1423. X *    int; unique tag
  1424. X */
  1425. X
  1426. Xint
  1427. Xrecipe_tag()
  1428. X{
  1429. X    return ++max_tag;
  1430. X}
  1431. X
  1432. X
  1433. X/*
  1434. X * NAME
  1435. X *    cook_status_name - give name of status
  1436. X *
  1437. X * SYNOPSIS
  1438. X *    char *cook_status_name(int);
  1439. X *
  1440. X * DESCRIPTION
  1441. X *    The cook_status_name function is used to map a cook status name into a
  1442. X *    more informative string equivalent of that status.
  1443. X *
  1444. X * RETURNS
  1445. X *    char *; pointer to C string.
  1446. X *
  1447. X * CAVEAT
  1448. X *    Do not pass the returned string to free().
  1449. X *    Do not alter the contents of the string pointed to by the return value.
  1450. X *    This function is obly available when synbol DEBUG is defined.
  1451. X *    Assumes that the argument will be a valid status value.
  1452. X */
  1453. X
  1454. X#ifdef DEBUG
  1455. X
  1456. Xstatic char *cook_status_name _((int));
  1457. X
  1458. Xstatic char *
  1459. Xcook_status_name(n)
  1460. X    int        n;
  1461. X{
  1462. X    static char *name[] =
  1463. X    {
  1464. X        "COOK_DONTKNOW",
  1465. X        "COOK_ERROR",
  1466. X        "COOK_DONE",
  1467. X        "COOK_UPTODATE",
  1468. X        "COOK_BACKTRACK",
  1469. X    };
  1470. X    static char buffer[12];
  1471. X
  1472. X    if (n >= 0 && n < SIZEOF(name))
  1473. X        return name[n];
  1474. X    sprintf(buffer, "%d", n);
  1475. X    return buffer;
  1476. X}
  1477. X
  1478. X#endif
  1479. X
  1480. Xstatic int cooker _((string_ty *, int, int)); /* forward */
  1481. X
  1482. X
  1483. X/*
  1484. X * NAME
  1485. X *    cook_search_list
  1486. X *
  1487. X * SYNOPSIS
  1488. X *    cook_search_list(wlist *slp);
  1489. X *
  1490. X * DESCRIPTION
  1491. X *    The cook_search_list function is used to get the search list
  1492. X *    from the "search_list" variable.
  1493. X *
  1494. X *    Defaulting and clean-up are done here, also.
  1495. X *    If absent, defaults to ".".
  1496. X *    If the first element is not "." then it is inserted.
  1497. X *
  1498. X * ARGUMENTS
  1499. X *    slp - where to put the result
  1500. X */
  1501. X
  1502. Xstatic void cook_search_list _((wlist *slp));
  1503. X
  1504. Xstatic void
  1505. Xcook_search_list(slp)
  1506. X    wlist        *slp;
  1507. X{
  1508. X    string_ty    *s;
  1509. X
  1510. X    /*
  1511. X     * make sure the variable exists
  1512. X     */
  1513. X    trace(("cook_search_list()\n{\n"/*}*/));
  1514. X    if (!id_search(id_search_list, ID_CLASS_VARIABLE, slp))
  1515. X    {
  1516. X        wl_zero(slp);
  1517. X        s = str_from_c(".");
  1518. X        wl_append(slp, s);
  1519. X        str_free(s);
  1520. X        id_assign(id_search_list, ID_CLASS_VARIABLE, slp);
  1521. X    }
  1522. X
  1523. X    /*
  1524. X     * make sure the search list isn't empty
  1525. X     */
  1526. X    if (!slp->wl_nwords)
  1527. X    {
  1528. X        s = str_from_c(".");
  1529. X        wl_append(slp, s);
  1530. X        str_free(s);
  1531. X        id_assign(id_search_list, ID_CLASS_VARIABLE, slp);
  1532. X    }
  1533. X
  1534. X    /*
  1535. X     * make sure the search list has "." as the first element
  1536. X     */
  1537. X    if
  1538. X    (
  1539. X        slp->wl_word[0]->str_text[0] != '.'
  1540. X    ||
  1541. X        slp->wl_word[0]->str_text[1]
  1542. X    )
  1543. X    {
  1544. X        s = str_from_c(".");
  1545. X        wl_prepend(slp, s);
  1546. X        str_free(s);
  1547. X        id_assign(id_search_list, ID_CLASS_VARIABLE, slp);
  1548. X    }
  1549. X    trace((/*{*/"}\n"));
  1550. X}
  1551. X
  1552. X
  1553. X/*
  1554. X * NAME
  1555. X *    cook_mtime
  1556. X *
  1557. X * SYNOPSIS
  1558. X *    long cook_mtime(string_ty *path);
  1559. X *
  1560. X * DESCRIPTION
  1561. X *    The cook_mtime function is used to scan the search path for
  1562. X *    a file to determine the last-modified time of the file.
  1563. X *
  1564. X * ARGUMENTS
  1565. X *    path - file to get the mtime for
  1566. X *
  1567. X * RETURNS
  1568. X *    long; -1 on error, 0 if no such file, >0 for time
  1569. X *
  1570. X * CAVEAT
  1571. X *    The user must design rules using the [resolve] function.
  1572. X */
  1573. X
  1574. Xstatic long cook_mtime _((string_ty *path));
  1575. X
  1576. Xstatic long
  1577. Xcook_mtime(path)
  1578. X    string_ty    *path;
  1579. X{
  1580. X    long        result;
  1581. X
  1582. X    trace(("cook_mtime(path = \"%s\")\n{\n"/*}*/, path->str_text));
  1583. X    if (path->str_text[0] == '/')
  1584. X        result = os_mtime(path);
  1585. X    else
  1586. X    {
  1587. X        wlist        sl;
  1588. X        long        j;
  1589. X
  1590. X        result = 0;
  1591. X        cook_search_list(&sl);
  1592. X        for (j = 0; j < sl.wl_nwords; ++j)
  1593. X        {
  1594. X            string_ty    *s1;
  1595. X            string_ty    *s2;
  1596. X            long        t;
  1597. X
  1598. X            s1 = sl.wl_word[j];
  1599. X            if (s1->str_text[0] == '.' && !s1->str_text[1])
  1600. X                s2 = str_copy(path);
  1601. X            else
  1602. X                s2 = str_format("%S/%S", s1, path);
  1603. X            t = os_mtime(s2);
  1604. X            str_free(s2);
  1605. X            if (t != 0)
  1606. X            {
  1607. X                result = t;
  1608. X                break;
  1609. X            }
  1610. X        }
  1611. X        wl_free(&sl);
  1612. X    }
  1613. X    trace(("return %ld;\n", result));
  1614. X    trace((/*{*/"}\n"));
  1615. X    return result;
  1616. X}
  1617. X
  1618. X
  1619. X/*
  1620. X * NAME
  1621. X *    cook_mtime_adjust
  1622. X *
  1623. X * SYNOPSIS
  1624. X *    int cook_mtime(string_ty *path);
  1625. X *
  1626. X * DESCRIPTION
  1627. X *    The cook_mtime_adjust function is used to adjust the mtime of
  1628. X *    the first element of the search path catted with the path given.
  1629. X *
  1630. X * ARGUMENTS
  1631. X *    path - mtime to adjust
  1632. X *
  1633. X * RETURNS
  1634. X *    int; 0 on success, -1 on error
  1635. X *
  1636. X * CAVEAT
  1637. X *    The user must design rules using the [resolve] function.
  1638. X */
  1639. X
  1640. Xstatic int cook_mtime_adjust _((string_ty *));
  1641. X
  1642. Xstatic int
  1643. Xcook_mtime_adjust(path)
  1644. X    string_ty    *path;
  1645. X{
  1646. X    int        result;
  1647. X
  1648. X    /*
  1649. X     * the first element is guaranteed to be "."
  1650. X     * so we call os_mtime_adjust with path
  1651. X     * whether it is absolute or relative.
  1652. X     */
  1653. X    trace(("cook_mtime_adjust(path = \"%s\")\n{\n"/*}*/, path->str_text));
  1654. X    result = os_mtime_adjust(path);
  1655. X    trace(("return %d;\n", result));
  1656. X    trace((/*{*/"}\n"));
  1657. X    return result;
  1658. X}
  1659. X
  1660. X
  1661. X/*
  1662. X * NAME
  1663. X *    cook_mtime_resolve
  1664. X *
  1665. X * SYNOPSIS
  1666. X *    int cook_mtime_resolve(wlist *output, wlist *input);
  1667. X *
  1668. X * DESCRIPTION
  1669. X *    The cook_mtime_resolve function is used to
  1670. X *    resolve the name used for a file in the search list.
  1671. X *
  1672. X *    It implements the "resolve" built-in function.
  1673. X *
  1674. X * ARGUMENTS
  1675. X *    input - the function arguments (0 is the func name)
  1676. X *    output - where to put the results
  1677. X *
  1678. X * RETURNS
  1679. X *    int; 0 on success, -1 on error
  1680. X *
  1681. X * CAVEAT
  1682. X *    The user must design rules using the [resolve] function.
  1683. X */
  1684. X
  1685. Xint
  1686. Xcook_mtime_resolve(output, input)
  1687. X    wlist        *output;
  1688. X    wlist        *input;
  1689. X{
  1690. X    int        result;
  1691. X    long        j;
  1692. X    wlist        sl;
  1693. X
  1694. X    trace(("cook_mtime_resolve(input = %08lX, output = %08lX)\n{\n"/*}*/,
  1695. X        input, output));
  1696. X    cook_search_list(&sl);
  1697. X    result = 0;
  1698. X    for (j = 1; j < input->wl_nwords; ++j)
  1699. X    {
  1700. X        string_ty    *arg;
  1701. X
  1702. X        arg = input->wl_word[j];
  1703. X        if (arg->str_text[0] == '/')
  1704. X            wl_append(output, arg);
  1705. X        else
  1706. X        {
  1707. X            int        done;
  1708. X            long        k;
  1709. X            
  1710. X            done = 0;
  1711. X            for (k = 0; k < sl.wl_nwords; ++k)
  1712. X            {
  1713. X                string_ty    *s1;
  1714. X                string_ty    *s2;
  1715. X                long        t;
  1716. X    
  1717. X                s1 = sl.wl_word[k];
  1718. X                if (s1->str_text[0] == '.' && !s1->str_text[1])
  1719. X                    s2 = str_copy(arg);
  1720. X                else
  1721. X                    s2 = str_format("%S/%S", s1, arg);
  1722. X                t = os_mtime(s2);
  1723. X                if (t < 0)
  1724. X                {
  1725. X                    result = -1;
  1726. X                    str_free(s2);
  1727. X                    break;
  1728. X                }
  1729. X                if (t > 0)
  1730. X                {
  1731. X                    wl_append(output, s2);
  1732. X                    str_free(s2);
  1733. X                    done = 1;
  1734. X                    break;
  1735. X                }
  1736. X                str_free(s2);
  1737. X            }
  1738. X            if (!done)
  1739. X                wl_append(output, arg);
  1740. X        }
  1741. X        if (result < 0)
  1742. X            break;
  1743. X    }
  1744. X    wl_free(&sl);
  1745. X    trace(("return %d;\n", result));
  1746. X    trace((/*{*/"}\n"));
  1747. X    return result;
  1748. X}
  1749. X
  1750. X
  1751. X/*
  1752. X * NAME
  1753. X *    chef - the bit that does the cooking
  1754. X *
  1755. X * SYNOPSIS
  1756. X *    int chef(string_ty *target, int dkwinge, recipe *rp,
  1757. X *        time_ty age, int forced, int build);
  1758. X *
  1759. X * DESCRIPTION
  1760. X *    The chef function is used to evaluate a recipe.
  1761. X *
  1762. X * RETURNS
  1763. X *    The chef function returns an int; one of the cook status values.
  1764. X *
  1765. X * CAVEAT
  1766. X *    The `target' variable is assumed to have already been set.
  1767. X *    The match pattern is assumes to have been pushed already.
  1768. X *    The recipe flags apply to expression evaluations for ingredients, too.
  1769. X */
  1770. X
  1771. Xstatic int chef _((string_ty *, int, recipe *, time_t, int, int));
  1772. X
  1773. Xstatic int
  1774. Xchef(target, dkwinge, rp, age, forced, build)
  1775. X    string_ty    *target;
  1776. X    int        dkwinge;
  1777. X    recipe        *rp;
  1778. X    time_t        age;
  1779. X    int        forced;
  1780. X    int        build;
  1781. X{
  1782. X    int        j;
  1783. X    int        k;
  1784. X    int        best;
  1785. X    char        *recipe_type_name;
  1786. X    wlist         friends;
  1787. X    wlist        need;
  1788. X    wlist        younger;
  1789. X    match_ty    *field;
  1790. X
  1791. X    trace(("chef(target = %08lX, dkwinge = %d, rp = %08lX, age = %ld, forced = %d, build = %d)\n{\n"/*}*/, target, dkwinge, rp, age, forced, build));
  1792. X    trace_string(target->str_text);
  1793. X    wl_zero(&need);
  1794. X    wl_zero(&younger);
  1795. X    wl_zero(&friends);
  1796. X    field = match_top();
  1797. X    if (field)
  1798. X    {
  1799. X        wl_reconstruct(&friends, &rp->r_target, field);
  1800. X        recipe_type_name = "implicit";
  1801. X    }
  1802. X    else
  1803. X    {
  1804. X        wl_copy(&friends, &rp->r_target);
  1805. X        recipe_type_name = "explicit";
  1806. X    }
  1807. X    id_assign_push(id_friend, ID_CLASS_VARIABLE, &friends);
  1808. X
  1809. X    /*
  1810. X     * age should be set to the worst case of all the targets
  1811. X     */
  1812. X    for (j = 0; j < friends.wl_nwords; ++j)
  1813. X    {
  1814. X        long        age2;
  1815. X
  1816. X        age2 = cook_mtime(friends.wl_word[j]);
  1817. X        if (age2 < 0)
  1818. X        {
  1819. X            best = COOK_ERROR;
  1820. X            goto ret;
  1821. X        }
  1822. X        if (age2 < age)
  1823. X            age = age2;
  1824. X    }
  1825. X
  1826. X    /*
  1827. X     * Flags apply to the precondition and to the ingredients evaluation.
  1828. X     * That is why the grammar puts them first.
  1829. X     */
  1830. X    cook_flags(rp->r_flags, OPTION_LEVEL_RECIPE);
  1831. X
  1832. X    /*
  1833. X     * wander through the ingredients, seeing if we know how to cook them
  1834. X     *    the first set is used to determine if to use this recipe
  1835. X     *    the second set must be cookable
  1836. X     */
  1837. X    if (!forced)
  1838. X        forced = option_test(OPTION_FORCE);
  1839. X    best = COOK_UPTODATE;
  1840. X    for (j = 0; j < rp->r_need.el_nexprs; ++j)
  1841. X    {
  1842. X        wlist    wl;
  1843. X
  1844. X        wl_zero(&wl);
  1845. X        if (expr_eval(&wl, rp->r_need.el_expr[j]))
  1846. X        {
  1847. X            wl_free(&wl);
  1848. X            best = COOK_ERROR;
  1849. X            goto ret;
  1850. X        }
  1851. X        for (k = 0; k < wl.wl_nwords; ++k)
  1852. X        {
  1853. X            string_ty *target2;
  1854. X            int    best2;
  1855. X    
  1856. X            target2 = wl.wl_word[k];
  1857. X            if (!os_legal_path(target2))
  1858. X            {
  1859. X                best = COOK_BACKTRACK;
  1860. X                wl_free(&wl);
  1861. X                goto ret;
  1862. X            }
  1863. X            wl_append_unique(&need, target2);
  1864. X            assert(rp->r_tag <= max_tag);
  1865. X            if (option_test(OPTION_TRACE))
  1866. X            {
  1867. X                error
  1868. X                (
  1869. X                    "\"%s\" %s \"%s\" by %s recipe %d (trace)",
  1870. X                    target->str_text,
  1871. X                    (dkwinge ? "requires" : "may require"),
  1872. X                    target2->str_text,
  1873. X                        recipe_type_name,
  1874. X                    rp->r_tag
  1875. X                );
  1876. X            }
  1877. X            option_undo_level(OPTION_LEVEL_RECIPE);
  1878. X            best2 = cooker(target2, dkwinge, build);
  1879. X            cook_flags(rp->r_flags, OPTION_LEVEL_RECIPE);
  1880. X            if (best2 == COOK_DONTKNOW)
  1881. X                best2 = COOK_ERROR;
  1882. X            if (best2 < best)
  1883. X                best = best2;
  1884. X            switch (best2)
  1885. X            {
  1886. X            case COOK_BACKTRACK:
  1887. X                best = best2;
  1888. X                wl_free(&wl);
  1889. X                goto ret;
  1890. X
  1891. X            default:
  1892. X                if (!option_test(OPTION_PERSEVERE))
  1893. X                {
  1894. X                    wl_free(&wl);
  1895. X                    goto ret;
  1896. X                }
  1897. X                break;
  1898. X    
  1899. X            case COOK_UPTODATE:
  1900. X                {
  1901. X                    time_t    mtime;
  1902. X
  1903. X                    mtime = cook_mtime(target2);
  1904. X                    if (mtime < 0)
  1905. X                    {
  1906. X                        wl_free(&wl);
  1907. X                        best = COOK_ERROR;
  1908. X                        goto ret;
  1909. X                    }
  1910. X                    if (mtime < age)
  1911. X                            break;
  1912. X                }
  1913. X                /* fall through... */
  1914. X    
  1915. X            case COOK_DONE:
  1916. X                forced = 1;
  1917. X                wl_append_unique(&younger, target2);
  1918. X                break;
  1919. X            }
  1920. X        }
  1921. X        wl_free(&wl);
  1922. X    }
  1923. X    for (j = 0; j < rp->r_need2.el_nexprs; ++j)
  1924. X    {
  1925. X        wlist    wl;
  1926. X
  1927. X        wl_zero(&wl);
  1928. X        if (expr_eval(&wl, rp->r_need2.el_expr[j]))
  1929. X        {
  1930. X            wl_free(&wl);
  1931. X            best = COOK_ERROR;
  1932. X            goto ret;
  1933. X        }
  1934. X        for (k = 0; k < wl.wl_nwords; ++k)
  1935. X        {
  1936. X            string_ty *target2;
  1937. X            int    best2;
  1938. X    
  1939. X            target2 = wl.wl_word[k];
  1940. X            if (!os_legal_path(target2))
  1941. X            {
  1942. X                best = COOK_BACKTRACK;
  1943. X                wl_free(&wl);
  1944. X                goto ret;
  1945. X            }
  1946. X            wl_append_unique(&need, target2);
  1947. X            if (option_test(OPTION_TRACE))
  1948. X            {
  1949. X                error
  1950. X                (
  1951. X                    "\"%s\" requires \"%s\" by %s recipe %d (trace)",
  1952. X                    target->str_text,
  1953. X                    target2->str_text,
  1954. X                        recipe_type_name,
  1955. X                    rp->r_tag
  1956. X                );
  1957. X            }
  1958. X            option_undo_level(OPTION_LEVEL_RECIPE);
  1959. X            best2 = cooker(target2, 1, build);
  1960. X            cook_flags(rp->r_flags, OPTION_LEVEL_RECIPE);
  1961. X            if (best2 == COOK_BACKTRACK || best2 == COOK_DONTKNOW)
  1962. X                best2 = COOK_ERROR;
  1963. X            if (best2 < best)
  1964. X                best = best2;
  1965. X            switch (best2)
  1966. X            {
  1967. X            default:
  1968. X                if (!option_test(OPTION_PERSEVERE))
  1969. X                {
  1970. X                    wl_free(&wl);
  1971. X                    goto ret;
  1972. X                }
  1973. X                break;
  1974. X    
  1975. X            case COOK_UPTODATE:
  1976. X                {
  1977. X                    time_t    mtime;
  1978. X
  1979. X                    mtime = cook_mtime(target2);
  1980. X                    if (mtime < 0)
  1981. X                    {
  1982. X                        wl_free(&wl);
  1983. X                        best = COOK_ERROR;
  1984. X                        goto ret;
  1985. X                    }
  1986. X                    if (mtime < age)
  1987. X                            break;
  1988. X                }
  1989. X                /* fall through... */
  1990. X    
  1991. X            case COOK_DONE:
  1992. X                forced = 1;
  1993. X                wl_append_unique(&younger, target2);
  1994. X                break;
  1995. X            }
  1996. X        }
  1997. X        wl_free(&wl);
  1998. X    }
  1999. X    if (!need.wl_nwords)
  2000. X        forced = 1;
  2001. X
  2002. X    /* 
  2003. X     * see if this recipe applies
  2004. X     */
  2005. X    if (rp->r_precondition)
  2006. X    {
  2007. X        int    result;
  2008. X
  2009. X        id_assign_push(id_need, ID_CLASS_VARIABLE, &need);
  2010. X        id_assign_push(id_younger, ID_CLASS_VARIABLE, &younger);
  2011. X        result = expr_eval_condition(rp->r_precondition);
  2012. X        id_delete(id_need, ID_CLASS_VARIABLE);
  2013. X        id_delete(id_younger, ID_CLASS_VARIABLE);
  2014. X        switch (result)
  2015. X        {
  2016. X        case -1:
  2017. X            best = COOK_ERROR;
  2018. X            goto ret;
  2019. X
  2020. X        case 0:
  2021. X            if (option_test(OPTION_TRACE))
  2022. X            {
  2023. X                error
  2024. X                (
  2025. X                    "\"%s\" precondition for %s recipe %d rejects (trace)",
  2026. X                    target->str_text,
  2027. X                    recipe_type_name,
  2028. X                    rp->r_tag
  2029. X                );
  2030. X            }
  2031. X            best = COOK_BACKTRACK;
  2032. X            goto ret;
  2033. X        }
  2034. X    }
  2035. X
  2036. X    /*
  2037. X     * See if we need to perform the actions attached to this recipe.
  2038. X     */
  2039. X    if (forced && rp->r_action)
  2040. X    {
  2041. X        if (build)
  2042. X        {
  2043. X            if (option_test(OPTION_TOUCH))
  2044. X            {
  2045. X                for (k = 0; k < rp->r_target.wl_nwords; k++)
  2046. X                {
  2047. X                    if (!option_test(OPTION_SILENT))
  2048. X                        error("touch %s", rp->r_target.wl_word[k]->str_text);
  2049. X                    if (os_touch(rp->r_target.wl_word[k]))
  2050. X                        best = COOK_ERROR;
  2051. X                    else
  2052. X                        best = COOK_DONE;
  2053. X                }
  2054. X            }
  2055. X            else
  2056. X            {
  2057. X                int    result;
  2058. X    
  2059. X                id_assign_push(id_need, ID_CLASS_VARIABLE, &need);
  2060. X                id_assign_push(id_younger, ID_CLASS_VARIABLE, &younger);
  2061. X                result = stmt_eval(rp->r_action);
  2062. X                id_delete(id_need, ID_CLASS_VARIABLE);
  2063. X                id_delete(id_younger, ID_CLASS_VARIABLE);
  2064. X                switch (result)
  2065. X                {
  2066. X                case STMT_BACKTRACK:
  2067. X                    best = COOK_DONTKNOW;
  2068. X                    break;
  2069. X    
  2070. X                case STMT_OK:
  2071. X                    best = COOK_DONE;
  2072. X                    break;
  2073. X    
  2074. X                case STMT_ERROR:
  2075. X                    if (option_test(OPTION_ERROK))
  2076. X                            best = COOK_DONE;
  2077. X                    else
  2078. X                            best = COOK_ERROR;
  2079. X                    break;
  2080. X    
  2081. X                default:
  2082. X                    best = COOK_ERROR;
  2083. X                    break;
  2084. X                }
  2085. X                if (best == COOK_ERROR && !option_test(OPTION_PRECIOUS))
  2086. X                {
  2087. X                        for (k = 0; k < friends.wl_nwords; k++)
  2088. X                            os_delete(friends.wl_word[k]);
  2089. X                }
  2090. X            }
  2091. X        }
  2092. X        else
  2093. X            best = COOK_DONE;
  2094. X    }
  2095. X
  2096. X    /*
  2097. X     * This recipe is being used, so
  2098. X     * perform its 'use' action.
  2099. X     *
  2100. X     * Ignore the 'touch' option,
  2101. X     * ignore the 'errok' option,
  2102. X     * don't delete files on errors.
  2103. X     */
  2104. X    if (rp->r_use_action && build)
  2105. X    {
  2106. X        int    result;
  2107. X
  2108. X        id_assign_push(id_need, ID_CLASS_VARIABLE, &need);
  2109. X        id_assign_push(id_younger, ID_CLASS_VARIABLE, &younger);
  2110. X        result = stmt_eval(rp->r_use_action);
  2111. X        id_delete(id_need, ID_CLASS_VARIABLE);
  2112. X        id_delete(id_younger, ID_CLASS_VARIABLE);
  2113. X        if (result != STMT_OK)
  2114. X            best = STMT_ERROR;
  2115. X    }
  2116. X
  2117. Xret:
  2118. X    option_undo_level(OPTION_LEVEL_RECIPE);
  2119. X    wl_free(&need);
  2120. X    wl_free(&younger);
  2121. X    if (best != COOK_BACKTRACK && (build || best != COOK_DONE))
  2122. X    {
  2123. X        for (j = 0; j < friends.wl_nwords; j++)
  2124. X            id_assign(friends.wl_word[j], ID_CLASS_ALREADY, &best);
  2125. X    }
  2126. X    if (best == COOK_DONE && rp->r_action && build)
  2127. X    {
  2128. X        /*
  2129. X         * update the times if it worked
  2130. X         * and if it was not an ingredients recipe
  2131. X         */
  2132. X        for (j = 0; j < friends.wl_nwords; j++)
  2133. X            if (cook_mtime_adjust(friends.wl_word[j]))
  2134. X                best = COOK_ERROR;
  2135. X    }
  2136. X    wl_free(&friends);
  2137. X    id_delete(id_friend, ID_CLASS_VARIABLE);
  2138. X    trace(("return %s;\n", cook_status_name(best)));
  2139. X    trace((/*{*/"}\n"));
  2140. X    return best;
  2141. X}
  2142. X
  2143. X
  2144. X/*
  2145. X * NAME
  2146. X *    cook - cook a target
  2147. X *
  2148. X * SYNOPSIS
  2149. X *    int cooker(string_ty *target, int dkwinge, int build);
  2150. X *
  2151. X * DESCRIPTION
  2152. X *    The cooker function is used to find and perform the actions required
  2153. X *    to bring the given target up-to-date.
  2154. X *
  2155. X * RETURNS
  2156. X *    The cook function returns int; one of the status return values
  2157. X *
  2158. X *    COOK_BACKTRACK    the given target was not possble, try something else
  2159. X *    COOK_UPTODATE    the given target required no action 
  2160. X *    COOK_DONE    some action was performed to bring it up to date
  2161. X *    COOK_ERROR    an error was found when performing some action
  2162. X *    COOK_DONTKNOW    don't know how to cook the given target
  2163. X */
  2164. X
  2165. Xstatic int cooker _((string_ty *, int, int));
  2166. X
  2167. Xstatic int
  2168. Xcooker(target, dkwinge, build)
  2169. X    string_ty    *target;    /* file which we want to cook */
  2170. X    int        dkwinge;    /* complain if don't know how to */
  2171. X    int        build;        /* build if true, EWOULDBUILD if not */
  2172. X{
  2173. X    time_t        age;        /* age of the target file */
  2174. X    int        j;        /* looping temporary */
  2175. X    int        best;        /* return status */
  2176. X    int        best2;
  2177. X    int        outofdate;
  2178. X    int        used_explicit_recipe;
  2179. X    int        used_ingredients_recipe;
  2180. X    int        used_implicit_recipe;
  2181. X    wlist        target_list;
  2182. X
  2183. X    trace(("cooker(target = %08lX, dkwinge = %d, build = %d)\n{\n"/*}*/, target, dkwinge, build));
  2184. X    trace_string(target->str_text);
  2185. X    wl_zero(&target_list);
  2186. X    wl_append(&target_list, target);
  2187. X    id_assign_push(id_target, ID_CLASS_VARIABLE, &target_list);
  2188. X    wl_free(&target_list);
  2189. X    used_ingredients_recipe = 0;
  2190. X    used_explicit_recipe = 0;
  2191. X    used_implicit_recipe = 0;
  2192. X
  2193. X    /*
  2194. X     * Check to see if this one has been cooked already.
  2195. X     * It may have failed, too.  If it is currently being cooked
  2196. X     * a value of COOK_BACKTRACK will be returned, this is to
  2197. X     * trap recursive recipes.
  2198. X     */
  2199. X    if (id_search(target, ID_CLASS_ALREADY, &best))
  2200. X    {
  2201. X        if (best == COOK_BACKTRACK)
  2202. X        {
  2203. X            error("%s: subject of recipe infinite loop", target->str_text);
  2204. X            option_set_errors();
  2205. X            best = COOK_ERROR;
  2206. X        }
  2207. X        goto ret;
  2208. X    }
  2209. X
  2210. X    /*
  2211. X     * add it to the "currently being cooked" list
  2212. X     */
  2213. X    best = COOK_UPTODATE;
  2214. X    age = cook_mtime(target);
  2215. X    if (age < 0)
  2216. X    {
  2217. X        best = COOK_ERROR;
  2218. X        goto ret;
  2219. X    }
  2220. X    best2 = COOK_BACKTRACK;
  2221. X    id_assign(target, ID_CLASS_ALREADY, &best2);
  2222. X
  2223. X    /*
  2224. X     * Look for the named file in the recipes.
  2225. X     * If it matches, cook its prerequisites.
  2226. X     * It is an explicit recipe if there is any action attached to any recipe
  2227. X     * targeting the named file.
  2228. X     */
  2229. X    outofdate = option_test(OPTION_FORCE);
  2230. X
  2231. X    /*
  2232. X     * Cook scans through the instanciated ingredients recipes.  All
  2233. X     * ingredients recipes with the target in their target list are used.
  2234. X     *
  2235. X     * If the recipe is used, any prerequisite files are recursively
  2236. X     * cooked, then if any of the prerequisite files were out of date, then
  2237. X     * all other explicit or implicit recipes with the same target will be
  2238. X     * deemed to be out of date.
  2239. X     */
  2240. X    for (j = 0; j < explicit.rl_nrecipes; j++)
  2241. X    {
  2242. X        if (desist)
  2243. X        {
  2244. X            best = COOK_ERROR;
  2245. X            goto ret;
  2246. X        }
  2247. X
  2248. X        if
  2249. X        (
  2250. X            explicit.rl_recipe[j].r_action
  2251. X        ||
  2252. X            !wl_member(&explicit.rl_recipe[j].r_target, target)
  2253. X        )
  2254. X            best2 = COOK_BACKTRACK;
  2255. X        else
  2256. X        {
  2257. X            match_push((match_ty *)0);
  2258. X            best2 = chef(target, dkwinge, &explicit.rl_recipe[j], age, outofdate, build);
  2259. X            match_pop();
  2260. X        }
  2261. X        if (best2 == COOK_BACKTRACK)
  2262. X            continue;
  2263. X        used_ingredients_recipe = 1;
  2264. X        if (best2 < best)
  2265. X            best = best2;
  2266. X        if (best2 < COOK_DONE && !option_test(OPTION_PERSEVERE))
  2267. X            goto ret;
  2268. X    }
  2269. X    if (best == COOK_DONE)
  2270. X        outofdate = 1;
  2271. X
  2272. X    /*
  2273. X     * Cook then scans through the instanciated explicit recipes.
  2274. X     * Keep looping until a single-colon recipe is met.
  2275. X     *
  2276. X     * If the recipe is used, any prerequisite files are recursively
  2277. X     * cooked, then if any prerequisites were out of date (including those
  2278. X     * of prerequisite recipes) then the actions bound to this recipe will
  2279. X     * be evaluated.
  2280. X     */
  2281. X    for (j = 0; j < explicit.rl_nrecipes; j++)
  2282. X    {
  2283. X        if (desist)
  2284. X        {
  2285. X            best = COOK_ERROR;
  2286. X            goto ret;
  2287. X        }
  2288. X
  2289. X        if
  2290. X        (
  2291. X            !explicit.rl_recipe[j].r_action
  2292. X        ||
  2293. X            !wl_member(&explicit.rl_recipe[j].r_target, target)
  2294. X        )
  2295. X            best2 = COOK_BACKTRACK;
  2296. X        else
  2297. X        {
  2298. X            match_push((match_ty *)0);
  2299. X            best2 = chef(target, dkwinge, &explicit.rl_recipe[j], age, outofdate, build);
  2300. X            match_pop();
  2301. X        }
  2302. X        if (best2 == COOK_BACKTRACK)
  2303. X            continue;
  2304. X        used_explicit_recipe = 1;
  2305. X        if (best2 < best)
  2306. X            best = best2;
  2307. X        if (best2 < COOK_DONE && !option_test(OPTION_PERSEVERE))
  2308. X            goto ret;
  2309. X        if (!explicit.rl_recipe[j].r_multiple)
  2310. X            goto ret;
  2311. X    }
  2312. X    if (used_explicit_recipe)
  2313. X        goto ret;
  2314. X
  2315. X    /*
  2316. X     * None of the recipes specified an action,
  2317. X     * although prerequisites may have been specified.
  2318. X     * Check out the implicit recipes, instead.
  2319. X     *
  2320. X     * The tricky part is when going through several
  2321. X     * layers of recipes.  If a cook of a prerequisite comes back
  2322. X     * with BACKTRACK, then try something else.
  2323. X     *
  2324. X     * Only the first applicable implicit recipe is used.
  2325. X     */
  2326. X    for (j = 0; j < implicit.rl_nrecipes; j++)
  2327. X    {
  2328. X        match_ty *mbuf;
  2329. X
  2330. X        if (desist)
  2331. X        {
  2332. X            best = COOK_ERROR;
  2333. X            goto ret;
  2334. X        }
  2335. X
  2336. X        mbuf = wl_match(&implicit.rl_recipe[j].r_target, target);
  2337. X        if (mbuf)
  2338. X        {
  2339. X            match_push(mbuf);
  2340. X            best2 = chef(target, 0, &implicit.rl_recipe[j], age, outofdate, build);
  2341. X            match_pop();
  2342. X            match_free(mbuf);
  2343. X        }
  2344. X        else
  2345. X            best2 = COOK_BACKTRACK;
  2346. X        if (best2 == COOK_BACKTRACK)
  2347. X            continue;
  2348. X        used_implicit_recipe = 1;
  2349. X        if (best2 < best)
  2350. X            best = best2;
  2351. X        if (!implicit.rl_recipe[j].r_multiple)
  2352. X            goto ret;
  2353. X    }
  2354. X    if (used_implicit_recipe)
  2355. X        goto ret;
  2356. X
  2357. X    /*
  2358. X     * None of the implicit recipes worked, either
  2359. X     * (perhapse none applied)
  2360. X     * so we don't know how to make this one.
  2361. X     *
  2362. X     * If it already exists, it must be up-to-date;
  2363. X     * but if it doesn't exist, then we may want to backtrack.
  2364. X     */
  2365. X    if (age <= 0 && !used_ingredients_recipe)
  2366. X        best = (dkwinge ? COOK_DONTKNOW : COOK_BACKTRACK);
  2367. X    if (best != COOK_BACKTRACK)
  2368. X        id_assign(target, ID_CLASS_ALREADY, &best);
  2369. X
  2370. Xret:
  2371. X    if (id_search(target, ID_CLASS_ALREADY, &best2) && best2 == COOK_BACKTRACK)
  2372. X        id_delete(target, ID_CLASS_ALREADY);
  2373. X    id_delete(id_target, ID_CLASS_VARIABLE);
  2374. X    if (option_test(OPTION_TRACE))
  2375. X    {
  2376. X        static char *name[] =
  2377. X        {
  2378. X            "don't know how",
  2379. X            "error",
  2380. X            "done",
  2381. X            "up to date",
  2382. X            "backtracking",
  2383. X        };
  2384. X
  2385. X        error("\"%s\" %s (trace)", target->str_text, name[best]);
  2386. X    }
  2387. X    else
  2388. X    {
  2389. X        switch (best)
  2390. X        {
  2391. X        case COOK_DONTKNOW:
  2392. X            if (dkwinge)
  2393. X                error("%s: don't know how", target->str_text);
  2394. X            break;
  2395. X
  2396. X        case COOK_ERROR:
  2397. X            error("%s: not done because of errors", target->str_text);
  2398. X            break;
  2399. X        }
  2400. X    }
  2401. X    trace(("return %s;\n", cook_status_name(best)));
  2402. X    trace((/*{*/"}\n"));
  2403. X    return best;
  2404. X}
  2405. X
  2406. X
  2407. X/*
  2408. X * NAME
  2409. X *    rl_append - append a recipe
  2410. X *
  2411. X * SYNOPSIS
  2412. X *    void el_append(rlist *rlp, recipe *rp);
  2413. X *
  2414. X * DESCRIPTION
  2415. X *    Rl_append is used to append a recipe to a recipe list.
  2416. X *
  2417. X * CAVEAT
  2418. X *    Recipes need to overwrite other recipes with
  2419. X *    identical target and prerequisite lists.
  2420. X */
  2421. X
  2422. Xvoid
  2423. Xrl_append(rlp, rp)
  2424. X    rlist        *rlp;
  2425. X    recipe        *rp;
  2426. X{
  2427. X    trace(("rl_append(rlp = %08lX, rp = %08lX)\n{\n"/*}*/, rlp, rp));
  2428. X    assert(rlp);
  2429. X    assert(rp);
  2430. X    assert(!rlp->rl_nrecipes == !rlp->rl_recipe);
  2431. X    assert(rp->r_tag > 0 && rp->r_tag <= max_tag);
  2432. X    *(recipe *)enlarge(&rlp->rl_nrecipes, (char**)&rlp->rl_recipe, sizeof(recipe)) = *rp;
  2433. X    trace((/*{*/"}\n"));
  2434. X}
  2435. X
  2436. X
  2437. X/*
  2438. X * NAME
  2439. X *    cook_flags - set them
  2440. X *
  2441. X * SYNOPSIS
  2442. X *    void cook_flags(int mask, option_levelk_ty level);
  2443. X *
  2444. X * DESCRIPTION
  2445. X *    The cook_flags function is used to take a flags variable and set the
  2446. X *    appropriate options at the given level.
  2447. X *
  2448. X * RETURNS
  2449. X *    void
  2450. X *
  2451. X * CAVEAT
  2452. X *    Use the option_undo_level function to remove the flag settings.
  2453. X */
  2454. X
  2455. Xvoid
  2456. Xcook_flags(mask, level)
  2457. X    int        mask;
  2458. X    int        level;
  2459. X{
  2460. X    trace(("cook_flags(mask = 0x%04X, level = %d)\n{\n"/*}*/, mask, level));
  2461. X    if (mask & RF_ERROK)
  2462. X        option_set(OPTION_ERROK, level, 1);
  2463. X    if (mask & RF_ERROK_OFF)
  2464. X        option_set(OPTION_ERROK, level, 0);
  2465. X    if (mask & RF_FORCE)
  2466. X        option_set(OPTION_FORCE, level, 1);
  2467. X    if (mask & RF_FORCE_OFF)
  2468. X        option_set(OPTION_FORCE, level, 0);
  2469. X    if (mask & RF_METER)
  2470. X        option_set(OPTION_METER, level, 1);
  2471. X    if (mask & RF_METER_OFF)
  2472. X        option_set(OPTION_METER, level, 0);
  2473. X    if (mask & RF_PRECIOUS)
  2474. X        option_set(OPTION_PRECIOUS, level, 1);
  2475. X    if (mask & RF_PRECIOUS_OFF)
  2476. X        option_set(OPTION_PRECIOUS, level, 0);
  2477. X    if (mask & RF_SILENT)
  2478. X        option_set(OPTION_SILENT, level, 1);
  2479. X    if (mask & RF_SILENT_OFF)
  2480. X        option_set(OPTION_SILENT, level, 0);
  2481. X    if (mask & RF_CLEARSTAT)
  2482. X        option_set(OPTION_INVALIDATE_STAT_CACHE, level, 1);
  2483. X    if (mask & RF_CLEARSTAT_OFF)
  2484. X        option_set(OPTION_INVALIDATE_STAT_CACHE, level, 0);
  2485. X    trace((/*{*/"}\n"));
  2486. X}
  2487. X
  2488. X
  2489. X/*
  2490. X * NAME
  2491. X *    cook - construct files
  2492. X *
  2493. X * SYNOPSIS
  2494. X *    int cook(wlist *targets);
  2495. X *
  2496. X * DESCRIPTION
  2497. X *    The cook function is used to cook the given set of targets.
  2498. X *
  2499. X * RETURNS
  2500. X *    The cook function returns 0 if all of the targets cooked sucessfully,
  2501. X *    or 1 if there was any problem.
  2502. X *
  2503. X * CAVEAT
  2504. X *    This function must be called after evrything has been initialized,
  2505. X *    and the cookbook read in.
  2506. X */
  2507. X
  2508. Xint
  2509. Xcook(wlp)
  2510. X    wlist        *wlp;
  2511. X{
  2512. X    int        retval;
  2513. X    int        j;
  2514. X
  2515. X    /*
  2516. X     * set interrupts to catch
  2517. X     *
  2518. X     * Note that tee(1) [see listing.c] must ignore them
  2519. X     * for the generated messages to appear in the log file.
  2520. X     */
  2521. X    trace(("cook(wlp = %08lX)\n{\n"/*}*/, wlp));
  2522. X    if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  2523. X        signal(SIGINT, interrupt);
  2524. X    if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
  2525. X        signal(SIGHUP, interrupt);
  2526. X    if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
  2527. X        signal(SIGTERM, interrupt);
  2528. X
  2529. X    /*
  2530. X     * cook each of the targets
  2531. X     */
  2532. X    retval = 0;
  2533. X    for (j = 0; j < wlp->wl_nwords; j++)
  2534. X    {
  2535. X        switch (cooker(wlp->wl_word[j], 1, 1))
  2536. X        {
  2537. X        case COOK_ERROR:
  2538. X        case COOK_DONTKNOW:
  2539. X            retval = 1;
  2540. X            break;
  2541. X
  2542. X        case COOK_UPTODATE:
  2543. X            error("%s: already up to date", wlp->wl_word[j]->str_text);
  2544. X            break;
  2545. X        }
  2546. X        if (retval > 0 && !option_test(OPTION_PERSEVERE))
  2547. X            break;
  2548. X    }
  2549. X    trace(("return %d;\n", retval));
  2550. X    trace((/*{*/"}\n"));
  2551. X    return retval;
  2552. X}
  2553. X
  2554. X
  2555. X/*
  2556. X * NAME
  2557. X *    isit_uptodate - test construct files
  2558. X *
  2559. X * SYNOPSIS
  2560. X *    int isit_uptodate(string_ty *target);
  2561. X *
  2562. X * DESCRIPTION
  2563. X *    The isit_uptodate function is used test if the giben target
  2564. X *    is up to date.
  2565. X *
  2566. X * RETURNS
  2567. X *    The isit_uptodate function returns
  2568. X *        -1 if any error is encountered
  2569. X *        0 if not up to date, or don't know how
  2570. X *        1 if target is uptodate.
  2571. X *
  2572. X * CAVEAT
  2573. X *    This function must be called after everything has been initialized,
  2574. X *    and the cookbook read in.
  2575. X */
  2576. X
  2577. Xint
  2578. Xisit_uptodate(target)
  2579. X    string_ty    *target;
  2580. X{
  2581. X    int        retval;
  2582. X
  2583. X    /*
  2584. X     * set interrupts to catch
  2585. X     *
  2586. X     * Note that tee(1) [see listing.c] must ignore them
  2587. X     * for the generated messages to appear in the log file.
  2588. X     */
  2589. X    trace(("isit_uptodate(target = %08lX)\n{\n"/*}*/, target));
  2590. X    trace_string(target->str_text);
  2591. X    if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  2592. X        signal(SIGINT, interrupt);
  2593. X    if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
  2594. X        signal(SIGHUP, interrupt);
  2595. X    if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
  2596. X        signal(SIGTERM, interrupt);
  2597. X
  2598. X    /*
  2599. X     * cook the target
  2600. X     */
  2601. X    switch (cooker(target, 0, 0))
  2602. X    {
  2603. X    default:
  2604. X        retval = -1;
  2605. X        break;
  2606. X
  2607. X    case COOK_UPTODATE:
  2608. X        retval = 1;
  2609. X        break;
  2610. X
  2611. X    case COOK_DONTKNOW:
  2612. X    case COOK_DONE:
  2613. X        retval = 0;
  2614. X        break;
  2615. X    }
  2616. X    trace(("return %d;\n", retval));
  2617. X    trace((/*{*/"}\n"));
  2618. X    return retval;
  2619. X}
  2620. X
  2621. X
  2622. X/*
  2623. X * NAME
  2624. X *    cando - test construct files
  2625. X *
  2626. X * SYNOPSIS
  2627. X *    int cando(string_ty *target);
  2628. X *
  2629. X * DESCRIPTION
  2630. X *    The cando function is used to test if the given target is cookable.
  2631. X *
  2632. X * RETURNS
  2633. X *    The cando function returns
  2634. X *        -1 if any error was encountered 
  2635. X *        0 if can't cook the target
  2636. X *        1 if can cook target
  2637. X *
  2638. X * CAVEAT
  2639. X *    This function must be called after everything has been initialized,
  2640. X *    and the cookbook read in.
  2641. X */
  2642. X
  2643. Xint
  2644. Xcando(target)
  2645. X    string_ty    *target;
  2646. X{
  2647. X    int        retval;
  2648. X
  2649. X    /*
  2650. X     * set interrupts to catch
  2651. X     *
  2652. X     * Note that tee(1) [see listing.c] must ignore them
  2653. X     * for the generated messages to appear in the log file.
  2654. X     */
  2655. X    trace(("cando(target = %08lX)\n{\n"/*}*/, target));
  2656. X    trace_string(target->str_text);
  2657. X    if (signal(SIGINT, SIG_IGN) != SIG_IGN)
  2658. X        signal(SIGINT, interrupt);
  2659. X    if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
  2660. X        signal(SIGHUP, interrupt);
  2661. X    if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
  2662. X        signal(SIGTERM, interrupt);
  2663. X
  2664. X    /*
  2665. X     * cook the target
  2666. X     */
  2667. X    switch (cooker(target, 0, 0))
  2668. X    {
  2669. X    default:
  2670. X        retval = -1;
  2671. X        break;
  2672. X
  2673. X    case COOK_DONTKNOW:
  2674. X        retval = 0;
  2675. X        break;
  2676. X
  2677. X    case COOK_UPTODATE:
  2678. X    case COOK_DONE:
  2679. X        retval = 1;
  2680. X        break;
  2681. X    }
  2682. X    trace(("return %d;\n", retval));
  2683. X    trace((/*{*/"}\n"));
  2684. X    return retval;
  2685. X}
  2686. END_OF_FILE
  2687. if test 30507 -ne `wc -c <'cook/cook.c'`; then
  2688.     echo shar: \"'cook/cook.c'\" unpacked with wrong size!
  2689. fi
  2690. # end of 'cook/cook.c'
  2691. fi
  2692. echo shar: End of archive 10 \(of 11\).
  2693. cp /dev/null ark10isdone
  2694. MISSING=""
  2695. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  2696.     if test ! -f ark${I}isdone ; then
  2697.     MISSING="${MISSING} ${I}"
  2698.     fi
  2699. done
  2700. if test "${MISSING}" = "" ; then
  2701.     echo You have unpacked all 11 archives.
  2702.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2703. else
  2704.     echo You still need to unpack the following archives:
  2705.     echo "        " ${MISSING}
  2706. fi
  2707. ##  End of shell archive.
  2708. exit 0
  2709.